一、类与类之间的关系
1.依赖关系
在方法中给方法传递一个对象。此时类与类的关系是最轻的
练习:
class DaXiang():
def open(self, thing):
print('大象')
thing.op()
print('打开%s' % thing.name)
def zhuang(self, thing):
print('大象自己走进%s' % thing.name)
def cl(self, thing):
thing.cl()
print('大象自己关%s门' % thing.name)
class BingXiang():
name = '冰箱'
def op(self):
print("%s自己打开门" % BingXiang.name)
def cl(self):
print('%s自己关门' % BingXiang.name)
bx = BingXiang()
da = DaXiang()
da.open(bx)
da.zhuang(bx)
da.cl(bx)
class plants():
def __init__(self, pname, gon):
self.pname = pname
self.gon = gon
def da(self, js):
print('我是%s,我要打僵尸,我的攻击力是:%s' % (self.pname, self.gon))
js.beida()
print('现在僵尸的血量是:%s' % (js.boold - self.gon))
class jiang():
def __init__(self, jname, boold):
self.jname = jname
self.boold = boold
def beida(self):
print('我是%s僵尸,我被打了!' % (self.jname))
z = plants('仙人掌', 20)
j = jiang('飞行', 80)
z.da(j)
2.关联关系(组合,聚合)
def __init__(self, name, xxLis = None):
self.name = name
if lst == None:
self.lst = []
else:
self.lst = lst
def __init__(self, name, thing):
self.name = name
self.thing = thing
练习:
class Boy():
def __init__(self, name, girlFriend = None):
self.name = name
self.girlFriend = girlFriend
def wan(self):
if self.girlFriend:
print('%s 和 %s 一起去吃饭' % (self.name, self.girlFriend.name))
else:
print('单身狗你没女朋友,辣鸡')
class Girl():
def __init__(self, name):
self.name = name
b = Boy('Euan')
g = Girl('ye')
b.girlFriend = g
b.wan()
b1 = Boy('Euan')
g1 = Girl('ye')
b1.wan()
class Teacher():
def __init__(self, name, lst=None):
self.name = name
if lst == None:
self.lst = []
else:
self.lst = lst
def add(self, student):
self.lst.append(student)
def display(self):
for s in self.lst:
print(s.name)
class Student():
def __init__(self, num, name, teacher=None):
self.name = name
self.num = num
self.teacher = teacher
t = Teacher('Euan')
s1 = Student(1,'a')
s2 = Student(2,'b')
s3 = Student(3,'c')
s4 = Student(4,'d')
t.add(s1)
t.add(s2)
t.add(s4)
t.display()
3.简单继承
self : 谁调用的,self就是谁
二、特殊成员
__init__()
初始化方法
__new__()
构造方法,用来创建对象,开辟内存
__call__()
调用:对象() 会自动执行
__getitem__()
对象[key] 会自动执
__setitem__()
对象[key] 会自动执行 对象[任意参数] => __getitem__(item)
__delitem__()
del 对象[key] 会自动执行 __delitem__()
__enter__() __exit__()
with 对象 as 变量 会自动执行 进入:__enter__ 和 出去:__exit__
__str__()
当打印一个对象的时候. 默认的去执行__str__ 根据__str__返回的结果进行打印
__repr__()
一个对象的官方字符串表示形式
__hash__()
哈希算法 hash(c) __hash()__ == None 可是对象不可哈希
__len__()
对象的长度 len(c)
__iter__()
迭代
__add__()
对象 + 对象
__name__
类的名字(字符串)
__doc__
类的文档字符串
__bases__
类的所有父类组成的元组
__dict__
类的属性组成的字典
__module__
类所属的模块
__class__
类对象的类型