一.依赖关系.
举个植物大战僵尸的例子就明白了:
写一个植物大战僵尸 1. 植物 打僵尸. 僵尸掉血 2. 僵尸 吃植物. 植物掉血
二.关联关系.
两种事物必须是互相关联的,但是在某些特殊情况下是可以更改和更换的.
三.一对多关系.
学校和老师的关系就是一对多关系:
继承关系:
类存在着继承和被继承的关系,被继承的类成为父类(基类);继承的类为子类(派生类)
四,关于类的补充.
类名的补充: 类名 => 变量名,举例说明
class Foo: def chi(self,food): print("我爱吃鱼和",food) class Bar: def chi(self,food): print("我爱吃肉和",food) dic = {Foo:"烤肠",Bar:"火腿"} for k,v in dic.items(): #将字典的内容解构给前面的俩变量 k().chi(v) #此时的k就是Foo,加个(),就相当于调用.
关于self的补充:
self到底是谁?
self:谁调用的就是谁. 类型是根据调用方的对象来进行变换的
super:表示的是父类
五.关于特殊方法.
特殊方法的小集合:
特殊成员:
__del__#析构方法,当对象在内存中被释放时,自动触发执行。此方法一般无须定义,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的
__call__#对象后面加括号,触发执行。构造方法的执行是由创建对象触发的,
即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()
__init__ 初始化操作
__getitem__ 对象[]
__setitem__ 对象[] = 值
__new__ 开辟内存.
__hash__ 可哈希. hash()
__enter__ with 对象:
__exit__ with 对象:结束的时候自动调用
__iter__ iter(对象), for
__str__ 打印对象的时候会自动执行
类的特殊方法__new示例:
class A: def __new__(cls, *args, **kwargs): print('new被执行了', args, kwargs) cls.__init__(cls, *args, **kwargs) def __init__(self, *args, **kwarg): self.b = args self.b2 = kwarg print('init被执行了', self.b) print('init被执行了2', self.b2) dic = {'b2':123} c = A(1, **dic)