目录
属性查找顺序
- 属性查找顺序:先从对象自身查找,对象没有就去类中查找,类中没有则报错
class Student: name = 'xxx' def __init__(self, name): self.name = name stu1 = Student('张三')print(stu1.name)
张三
类与对象的绑定方法
class Student: school = 'a中' def __init__(self, num, name, age): self.num = num self.name = name self.age = age def eat(self): print(self.school) print(self.name) self.num += 1 print(f'{self.num} is eat') print(id(self)) stu1 = Student(1, '张三', 19)# Student.eat(111) # 在这里self=111,所以会报错,以为111没有school用法stu1.eat()print(id(stu1))
a中张三2 is eat2874406763320 # 说明self和stu1是同一个东西2874406763320
- 针对类而言:eat里的self就是正常传入的参数
- 针对对象而言:eat里的self就是对象本身
类与数据类型
- Python中一切皆对象
lis = [1, 2, 3] # 和下面代码等价,就是一个实例化对象的过程,只是简写了lis1 = list([1, 2, 3])print(type(lis)) #类型就是一个名为list的类lis.append(5) # 和下面代码等价,就是一个查找类中方法的过程list.append(lis1, 5)print(lis)print(lis1)
[1, 2, 3, 5][1, 2, 3, 5]
对象的高度整合
- 在类中封装了一大堆属性,然后又封装了一大堆方法(专门用来控制这些属性),并且在这基础之上,对于不同的对象,这些属性和方法又不相同。
- 个人理解有点类似于闭包
class Student: def __init__(self, num, name, age): self.num = num self.name = name self.age = age def eat(self): print(self.name, '开始吃饭了') def sleep(self): print(self.name, '开始睡觉了') zhangsan = Student(1, '张三', 19)lisi = Student(2, '李四', 20)zhangsan.eat()lisi.eat()
- 闭包函数
import requestsdef outter(url) def sqider(): response = requests.get(url) response.encoding = 'gb2312' data = response.text return data return sqider xiaohuar = outter('http://www.xiaohuar.com')print(xiaohuar)print(xiaohuar)
- 只是闭包外面套了个函数,而对象外面套了个类