1、类与类之间的联系
1.1 依赖关系
类A中使用了类B, 类B作为参数传进类A的方法中被使用. 这种关系中类与类之间的联系是最轻的.
1 class Elephant: 2 3 def open(self,ele): # ele 接收的是一个BingXiang的对象 4 print("我是大象,我会开门") 5 ele.kai() 6 7 def jinqu(self): 8 print("我是大象,我会自己进封闭容器") 9 10 def close(self,ele): 11 print("我是大象,我会关门") 12 ele.guan() 13 14 15 class BingXiang: 16 17 def kai(self): 18 print("我是冰箱,我会替别人开门") 19 20 def guan(self): 21 print("我是冰箱,我会替别人关门") 22 23 24 class DianFanBao: 25 26 def kai(self): 27 print("我是电饭煲,我会替别人开门") 28 29 def guan(self): 30 print("我是电饭煲,我会替别人关门") 31 32 33 bx = BingXiang() 34 dfb = DianFanBao() 35 e = Elephant() 36 e.open(bx) 37 e.jinqu() 38 e.close(dfb)
1.2 关联关系(组合关系,聚合关系)
三种关系写法是一样的, 但意义是不一样的.
关联关系: 类A和类B是互相关联的, 类A中使用了类B, 类B成为类A中的属性或成员. 关系程度要比依赖关系强点.
1 class Teacher: 2 3 def __init__(self,name,lst=None): 4 self.name = name 5 if lst == None: 6 self.lst = [] 7 else: 8 self.lst = lst 9 10 def add_sd(self,obj): 11 self.lst.append(obj) # 将这几个学生对象添加进self.lst这个老师类的字段中,成为该属性的一部分. 12 13 14 class Student: 15 16 def __init__(self,name,numb,score): 17 self.name = name 18 self.numb = numb 19 self.score = score 20 21 s1 = Student("王大锤",1001,95) 22 s2 = Student("李二炮",1003,90) 23 s3 = Student("马老五",1004,88) 24 t = Teacher("张老师",[Student("二壮",1010,99)]) 25 t.add_sd(s1) 26 t.add_sd(s2) 27 t.add_sd(s3) 28 for i in t.lst: 29 print(i.name)
1.3 继承关系
见后续.
2、特殊成员方法
__new__() 构造方法, 在创建对象内存时调用.
__init__() 初始化方法, 往创建好的对象内存里存数据
__call__() 对象()时会被调用.
__dict__() 将类或者对象内存空间里的全部属性打包成字典的形式.
类: 有各种内部属性, 内部方法和一些静态字段, 方法之类的.
对象: 在自己的内存空间里只有自己的字段.
__str__() 在打印一个对象时默认会执行__str__()方法, 根据返回的结果进行打印.
__int__() 数据int()调用
__repr__() 一个字符串的官方表示形式
__getitem__() 对象[key]自动调用
__setitem__() 对象[key] = value自动调用
__delitem__() del 对象[key]时调用
__enter__() with打开文件时调用
__exit__() with关闭文件时调用
__add__() 两个对象相加
__len__() len(对象)时调用
__iter__() for循环时调用
__hash__() 哈希时调用
__lt__() 小于
__gt__() 大于
__le__() 小于等于
__ge__() 大于等于
__del__() 析构(删除清空对象)