依赖关系 母子
class Children:
def __init__(self, name, age, gender, parent):
self.name = name
self.age = age
self.gender = gender
self.parent = parent
def say(self):
print("我叫%s,今年%d岁了,性别%s,%s是我的父母" % (self.name, self.age, self.gender, self.parent.name))
class Parent:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
p = Parent("高斯", 30, '女')
c = Children("小红", 7, '女', p)
c.say()

关联关系 你和你的女朋友
通过第三方类来确定关系
组合关系 比聚合更进一步,类似人体,假设人挂了,人体的器官就会跟着衰竭
class Dog:
role = 'dog'
life_val = 100
def __init__(self, name, breed, attack_val):
self.name = name
self.breed = breed
self.attack_val = attack_val
def bite(self, person):
person.life_val -= self.attack_val
print("%s咬了%s一口,扣除%d血量,剩余血量%d" % (self.name, person.name, self.attack_val, person.life_val))
# 武器库
class Weapon:
# AK-47
def gun(self, obj):
self.name = "AK-47"
self.attack_val = 100
obj.life_val -= self.attack_val
self.result(obj)
# 棍棒
def stick(self, obj):
self.name = "stick"
self.attack_val = 70
obj.life_val -= self.attack_val
self.result(obj)
# 用脚踢
def kick(self, obj):
self.name = "脚"
self.attack_val = 40
obj.life_val -= self.attack_val
self.result(obj)
def result(self, obj):
print("%s伤害了%s一下,扣除%d血量,剩余血量%d" % (self.name, obj.name, self.attack_val, obj.life_val))
class Person:
role = 'person'
life_val = 100
def __init__(self, name, breed, attack_val):
self.name = name
self.breed = breed
# self.attack_val = attack_val
self.weapon = Weapon() # 直接实例化武器库,让其与人进行绑定,一同初始化
d = Dog("二哈","哈士奇",30)
p = Person("王辉","猎人",50)
d.bite(p)
p.weapon.gun(d)

聚合关系 电脑的零部件组成一台电脑,每个组件都有自己的生命周期,但是互不干涉,无论谁有问题,其他东西都还可以用
继承关系 类的三大特性之一,子承父业
class Weapon:
type = "武器"
def __init__(self, name, weight, attack_val):
self.name = name
self.weight = weight
self.attack_val = attack_val
self.attack()
def attack(self):
print("%s走火了" % self.name)
class Gun(Weapon):
type = "枪类"
def __init__(self, name, weight, attack_val, birthtime): # 重写父类的属性并且还想要他添加的类
# Weapon.__init__(self, name, weight, attack_val) # py2
# super(Gun, self).__init__(name, weight, attack_val) # py3,效果同上
self.birthtime = birthtime
super().__init__(name, weight, attack_val) # 简写版(推荐)
# print(self.birthtime)
def attack(self): # 重写父类方法
# Weapon.attack(self) # py2
# super(Gun, self).attack() # py3
super().attack()
print("%s出生于%d年" % (self.name, self.birthtime))
a = Weapon("火箭炮", 180, 99)
g = Gun("AN9K", 255, 98, 1988)

多继承

多继承的C3算法
class A(object):
def test(self):
print("from A")
class B(A):
# def test(self):
# print("from B")
pass
class B2:
def test(self):
print("from B2")
class C(A):
def test(self):
print("from C")
class C2:
def test(self):
print("from C2")
class D(B, B2):
# def test(self):
# print("from D")
pass
class E(C, C2):
def test(self):
print("from E")
class F(D, E):
# def test(self):
# print("from F")
pass
print(F.mro()) # 打印继承顺序

本文介绍了Python中类与对象的关系,包括依赖、关联、组合、聚合、继承等概念,并通过实例展示了它们在实际编程中的应用。示例中,创建了Person、Weapon、Dog等类,演示了类之间的关联、组合和继承关系。此外,还讨论了多继承的C3算法及其在Python中的实现。
3408

被折叠的 条评论
为什么被折叠?



