今日大纲
1.类的加载顺序
2.类和对象的命名空间
3.组合
1.类的加载顺序
加载顺序:
类中从上至下写入内存,遇到方法只加载进内存中,方法不会执行,最后类名指向这个类的内存空间地址。
2.类和对象的命名空间
类里存放的内容:
1.静态变量
2.动态变量(方法)
注:在操作静态变量时候最好使用类名来操作,这样所有的对象在操作这个静态变量都会发生变化
对象存放的内容:
1.对象的属性
2.类指针
对象的取值顺序:
1.对象空间
2.类空间
注:对象在类空间都没有找到值会报错
类的取值顺序:
1.类空间
注:如果类里不存在则报错
类里有可变数据类型的例子:
class Test: lis = [] def __init__(self,name): self.name = name t1 = Test('t1') t1.lis.append('t1') t2 = Test('t2') print(t2.lis) # ['t1'] 在对象空间操作类空间里的可变数据类型,所有对象和类都会用改变后的结果 t2.lis = ['t2'] # 这样相当于在t2对象空间里赋值了一个key = value print(t2.lis) # ['t2'] print(Test.lis) # ['t1'] print(t2.__dict__) # {'name': 't2', 'lis': ['t2']}
注:对象.变量名 = value 是在对象空间添加一个变量名和value
3.组合
类的对象的属性是另一个类的对象。
松耦合的表现:
重复的值(写死的值)都是通过另一个类的对象来操作,如果要修改也只需要修改另一个类的对象属性。
组合的例子:
class Course: def __init__(self,name,price,time): self.name = name self.price = price self.time = time class Student: def __init__(self,name,age,sex,course): self.name = name self.age = age self.sex = sex self.course = course def pri(self): msg = """ 姓名:%s 年龄:%s 性别:%s 报名课程:%s 课程价格:%s 课程时长:%s """ %(self.name,self.age,self.sex,self.course.name,self.course.price,self.course.time) print(msg) python = Course('python',111,'6个月') # 先创建python课程 zz = Student('zz',11,'boy',python) # 实例化对象在课程参数那把python对象传入 tt = Student('tt',22,'boy',python) zz.pri() python.price = 11111 # 如果创建的学生对象很多,只需要修改课程对象里的属性即可 python.time = '7个月' tt.pri() """ 姓名:zz 年龄:11 性别:boy 报名课程:python 课程价格:111 课程时长:6个月 姓名:tt 年龄:22 性别:boy 报名课程:python 课程价格:11111 课程时长:7个月 """