在这里用语言总结一下,创建类的时候,会分配相应的类的命名空间。在实例化对象的时候,也会分配相应实例化对象的命名空间。我们首先要弄清楚每一个命名空间里面都是存了什么。在实例化对象中调用属性和方法的时候,我们都是先从实例化对象开始找,找到就是我们要的。如果没有找到就通过类指针继续向类中找,类中如果找到了就是我们要的。如果没有被找到,我们继续想父类找。。。。以此类推。。
在这里我们对命名空间的知识做一个总结:
1.类中的变量是静态变量/静态属性,对象中的变量是属于是实例变量/实例属性。
2.对象中的变量只属于对象本身,每个对象有属于自己的空间来存储对象的变量,当使用对象名去调用某一个属性的时候会优先在自己的空间中寻找,找不到再去对应的类中寻找。如果自己没有就会去引用类的,如果类也没有那么就会报错。对于类来说,类中的变量所有的对象都是可以读取的,并且读取的是同一份变量
3.类中的静态变量的用处:如果一个变量是所有的对象共享的值,那么这个变量应该被定义成静态变量。所有和静态变量相关的增删改查都应该使用类名来处理,而不应该使用对象名直接修改静态变量。因为会在对象的命名空间中创建一个变量。这样的话就失去了静态变量的意义。
(5)对象的组合(注重在属性)在学习组合之前,我们先了解一下组合这个概念。组合其实是:一个类的对象是另外一个类对象的属性。这个就是我们说的组合。对象变成了另外一个对象的属性,这个就是组合
在这里我们举一个组合的例子:班级类的对象为学生类对象的一个属性,这个例子的应用就是组合
1.学生信息类:姓名、性别、年龄、学号、班级、手机号
2.班级信息类:班级名称、开班时间、当前讲师
问:我们怎么取到姓名为zhouqian的班级信息,怎么取到姓名为zhouqian的班级名称,怎么取到姓名为zhouqian的班级开班时间、怎么取到姓名为zhouqian的班级当前讲师?我们实现的代码如下所示。
# 学生类 # 姓名 性别 年龄 学号 班级 手机号 class Student: def __init__(self, name, sex, age, number, cls, phone): self.name = name self.sex = sex self.age = age self.number = number self.cls = cls self.phone = phone # 班级信息 # 班级名称 # 开班时间 # 当前讲师 class Cls: def __init__(self, cname, begin, teacher): self.cname = cname self.begin = begin self.teacher = teacher py22 = Cls(\'python全栈22期\', \'2019-4-26\', \'小白\') py23 = Cls(\'python全栈23期\', \'2019-5-28\', \'宝元\') student = Student(\'大壮\', \'male\', 18, 27, py23, \'13912012012\') student1 = Student(\'雪飞\', \'female\', 18, 17, py22, \'13912012013\') print(student.cls, py23) # <__main__.Cls object at 0x000002E529888A48> <__main__.Cls object at 0x000002E529888A48> print(py23.begin) # 2019-5-28 # 查看student(大壮)所在的班级cls的开班日期是多少? print(student.cls.begin) # 2019-5-28 # 查看student(雪飞)所在的班级cls的开班日期是多少? print(student1.cls.begin) # 2019-4-26在这里我们在举一个组合的例子:
1.班级信息类:班级名称、开班时间、当前讲师、包含一个属性--课程
2.课程信息类:课程名称、课程周期、课程价格
创建两个班级linux57和python22
查看linux57期的班级所学课程的价格
查看python22期的班级所学课程的周期
class cls: def __init__(self,cname,begin,teacher,course): self.cname = cname self.begin = begin self.teacher = teacher self.course = course class course: def __init__(self,csname,cstime,csprice): self.csname = csname self.cstime = cstime self.csprice = csprice linux = course(\'linux\',\'一个月\',10000) python = course(\'python\',\'两个月\',20000) linux57 = cls(\'linux57\',\'2019-1-1\',\'zhouqian\',linux) python22 = cls(\'python\',\'2019-4-26\',\'andreas\',python) # 查看linux57期的班级所学课程的价格 print(linux57.course.csprice) # 查看python22期的班级所学课程的周期 print(python22.course.cstime) \'\'\' 输出的结果为: 10000 两个月 \'\'\'