栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【python面向对象学习笔记】类之间的关系

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【python面向对象学习笔记】类之间的关系

class Dog:
    role="dog"
    def __init__(self,name,breed,lifeval,attackval,master) -> None:
        self.name=name
        self.breed=breed
        self.lifeval=lifeval
        self.attackval=attackval
        self.master=master # 传入一个对象
        self.wangwang() # 在实例化时调用自己的方法

    def wangwang(self): # 对象之间的依赖关系
        print(f"wangwang!My name is {self.name},my breed is {self.breed},my master is {self.master.name}!")

    def bite(self,person_obj):
        person_obj.lifeval -= self.attackval
        print(f"{self.name}咬了{person_obj.name}一下,人{person_obj.name}掉血{self.attackval},还有血量{person_obj.lifeval}...")

class Weapon: # 对象之间的组合关系:由一堆组件构成一个完整的实体,组件本身独立,但又不能自己运行,必须跟宿主组合在一起运行
    def dog_stick(self,obj):
        """打狗棒"""
        self.name="打狗棒"
        self.attack_val=40
        obj.lifeval-=self.attack_val
        self.print_log(obj)

    def knife(self,obj):
        """屠龙刀"""
        self.name="屠龙刀"
        self.attack_val=80
        obj.lifeval-=self.attack_val
        self.print_log(obj)

    def gun(self,obj):
        """AK47"""
        self.name="AK47"
        self.attack_val=100
        obj.lifeval-=self.attack_val
        self.print_log(obj)

    def print_log(self,obj):
        print(f"{obj.name}被{self.name}攻击了,掉血{self.attack_val},还剩血量{obj.lifeval}")

class Person:
    role="person"
    def __init__(self,name,age,sex,lifeval,attackval,relation) -> None:
        self.name=name
        self.age=age
        self.breed=sex
        self.lifeval=lifeval
        self.attackval=attackval
        self.weapon=Weapon() # 在这里直接对Weapon进行实例化,说明,有一个人实例化,就会有一个weapon实例化,把Weapon()放在这,完成对象之间的组合
        self.partner=None
        self.relation=relation

    def beat(self,dog_obj):
        dog_obj.lifeval -= self.attackval
        print(f"{self.name}打了{dog_obj.name}一下,狗{dog_obj.name}掉血{self.attackval},还有血量{dog_obj.lifeval}...")

    def private_stuff(self):
        pass

class RelationShip: # 对象间的关联关系
    """保存couple之间的对象关系"""
    def __init__(self) -> None:
        self.couple = []

    def create_couple(self,obj1,obj2):
        self.couple = [obj1,obj2] # 两个人就成了对象
        print(f"{obj1.name}和{obj2.name}确定了男女关系")

    def get_mypartner(self,obj): # p1 p2 都有可能调用这个方法
        for p in obj.relation.couple: # obj.relation.couple中存储的是一个对象列表
            if p is not obj:
                print(f"{obj.name}的对象是{p.name}")
                return p
        else:
            print(f"{obj.name}没有对象...")
            return None

    def break_up(self):
        print(f"{self.couple[0].name}和{self.couple[1].name}分手了....")
        self.couple.clear() # 分手


if __name__=="__main__":

    relation=RelationShip()
    p1=Person("小红",20,"女",200,15,relation)
    p2=Person("小黄",18,"男",200,17,relation)
    p3=Person("小蓝",18,"男",200,19,relation)
    p4=Person("小绿",19,"女",200,14,relation)
    p5=Person("小黑",22,"男",200,16,relation)
    d1=Dog("小金","金毛",100,20,p1)
    d2=Dog("小木","藏獒",100,30,p2)
    d3=Dog("小水","京巴",100,24,p3)
    d4=Dog("小火","黑贝",100,23,p4)
    d5=Dog("小土","二哈",100,25,p5)
    
    p1.beat(d1) # 简单的对象交互关系
    d2.bite(p5)
    # 双向绑定,双向关联
    p1.partner = p2
    p2.partner = p1
    print(p1.partner.name)

    
    relation.create_couple(p3,p4) # 让两人成为对象
    print(p3.relation.couple)
    p4.relation.get_mypartner(p4)
    p4.relation.break_up()
    p4.relation.get_mypartner(p4)

    # 人用武器打狗
    d3.bite(p1)
    p1.weapon.gun(d3)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923391.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号