1. 依赖关系
执行某个动作的时候. 需要xxx来帮助你完成这个操作. 此时的关系是最轻的.
随时可以更换另外一个东西来完成此操作
class Person:
def play(self, tools): # 通过参数的传递把另外一个类的对象传递进来
tools.run()
print("很开心, 我能玩儿游戏了")
class Computer:
def run(self):
print("电脑开机. 可以运行")
class Phone:
def run(self):
print("手机开机, 可以运行")
c = Computer()
phone = Phone()
p = Person()
p.play(phone)
2、关联关系
在对象里边埋对象
self.girlFriend = girl
① 一对一关系
class Boy:
def __init__(self, name, girlFriend=None):
# 在初始化的时候可以给一个对象的属性设置成另一个类的对象
self.girlFriend = girlFriend # 一个男孩有一个女朋友
def chi(self):
if self.girlFriend:
print(f"带着他的女朋友{self.girlFriend.name}去吃饭")
else:
print("单身狗, 吃什么吃? 滚去学习.")
② 一对多关系
class School:
def __init__(self,name):
self.name = name
self.teach_list = []
def employ(self,teacher):
self.teach_list.append(teacher)
def goclass(self):
for i in self.teach_list:
i.work()
class Teacher:
def __init__(self,name):
self.name = name
def work(self):
print(f‘{self.name}老师去上课了‘)
s = School(‘哈佛‘)
t1 = Teacher(‘zhangmeng‘)
t2 = Teacher(‘sunxinag‘)
t3 = Teacher(‘lina‘)
t4= Teacher(‘zhenjia‘)
t5= Teacher(‘lixiao‘)
t6 = Teacher(‘zhouying‘)
t7 = Teacher(‘huyang‘)
s.employ(t1)
s.employ(t2)
s.employ(t3)
s.employ(t4)
s.employ(t5)
s.employ(t6)
s.employ(t7)
s.goclass()
类中的关系:依赖关系是最轻的,最终的是继承关系,关联关系是比较微妙的
3、继承关系
子类在不影响父类的程序运行的基础上对父类进行的扩充和扩展,这里我们把父类称为超类或者基类,子类被称为派生类。我们写好的类和创建的对象,默认都是可哈希的。
class Foo:
__hash__ = None
print(hash(Foo))
print(hash(Foo()))
self 到底是谁:self就是你访问方法的那个对象,谁调用的就是谁。类型是根据调用方的对象来进行交换的。
self访问方法的顺序:永远是先找自己,自己的找不到再找父类
super:表示父类
class Foo():
def eat(self,food):
print("我爱吃鱼和",food)
class Bar:
def eat(self,food):
print("我爱吃肉和",food)
dic = {Foo:"鸡蛋",Bar:"香肠"}
for k,v in dic.items():
k().eat(v)
4、继承
class Base:
def __init__(self,num):
self.num = num
def func1(self):
print(self.num)
self.func2()
def func2(self):
print(111,self.num)
class Foo(Base):
def func2(self):
print(222,self.num)
lst = [Base(1), Base(2),Foo(3)]
for obj in lst:
obj.func1()
原文:https://www.cnblogs.com/lyt96/p/12512093.html