zoukankan      html  css  js  c++  java
  • python 22 类与对象

    1. 从空间角度研究类

    1.1 添加对象的属性:

    	在类的__init__中可以添加;
    	在类的方法中也可以添加;
    	在类的内部也可以添加。
    

    1.2 添加类的属性:

    	在类的方法中可以添加,传参;
    	在类的外部也可添加。
    

    1.3 类与对象的关系:

    类名(): 实例化对象,会在对象空间生成一个类对象指针,指向类空间。
    
    对象空间有相同的名字时,肯定先从对象空间找。对象之所以可以找到类。是因为对象空间中有类对象指针。
    对象查找属性的顺序:  对象.名字
    	对象空间——>类空间——>父类空间
    	
    类查找属性的顺序:	类.名字
    	类空间——>父类空间
    

    2. 类与类直接的关系

    2.1 类与类的关系:

    1. 依赖关系
    2. 关联关系
    3. 组合关系
    4. 聚合关系
    5. 实现关系
    6. 继承关系(类的三大特性之一:继承。)

    2.2 依赖关系 —— 主从之分

    ​ 将一个类的类名或者对象传入另一个类的方法中。

    class Elephant:
        
        def __init__(self,name):
            self.name = name
    
        def open(self, argv):
            print(f"{self.name} 默念三声 开门")
            argv.be_open()
    
        def close(self, argv):
            print(f"{self.name} 默念三声 关门")
            argv.be_close()
            
            
    class Refrigerator:
        
        def __init__(self,name):
            self.name = name
    
        def be_open(self):
            print(f"{self.name} 被打开")
    
        def be_close(self):
            print(f'{self.name} 被关上')
    
    meet = Elephant("MEET")
    haier = Refrigerator("海尔")
    
    meet.open(haier)   # 对象名做参数传入到类的方法中
    meet.close(haier)
    

    2.3 组合关系

    ​ 将一个类的对象封装到另一个类的对象的属性中。在外部使用增、改方法,将其封装。

    ​ self:永远默认接受本类或子类的实例化对象。

    class Boy:
        def __init__(self, name, girlfirend = None):
            self.name = name
            self.girlfirend = girlfirend
        def have_a_dinner(self):
            if self.girlfirend:
                print(f'{self.name}与他的{self.girlfirend.age}岁女朋友{self.girlfirend.name}一起烛光晚餐!')
            else:
                print("单身狗,吃什么吃!")
        def girl_skill(self):
            print(f'{self.name}的女朋友 ', end='')
            self.girlfirend.skill()
    
    class Girl:
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
        def skill(self):
            print(f'{self.name}的职业是老师。')
    
    meet = Boy("宝元")
    alex = Girl("alex", 20)
    meet.girlfirend = alex   # 将类的对象封装到另一个类的对象的属性中
    meet.have_a_dinner()
    meet.girl_skill()
    
    class GameRole:
        def __init__(self,name,ad,hp):
            self.name = name
            self.ad = ad
            self.hp = hp
    
        def attck(self,p1):
            p1.hp = p1.hp - self.ad
            print(f'{self.name}攻击{p1.name},{p1.name}掉了{self.ad}血,还剩{p1.hp}血')
    
        def equipment_wea(self,wea):
            self.weapon = wea     # Sword
    
    class Weapon:   # 武器类
    
        def __init__(self,name,ad):
            self.name = name
            self.ad = ad
    
        def weapn_attack(self,p1,p2):
            p2.hp =p2.hp - self.ad
            print(f'{p1.name}利用{self.name}打了{p2.name}一下,{p2.name}掉了{self.ad}血,还剩{p2.hp}血. ')
    
    gailun = GameRole("盖伦",10,100)
    xin = GameRole("赵信",20,80)
    
    Sword = Weapon("大宝剑",15)
    Musket = Weapon("长枪",30)
    
    gailun.equipment_wea(Sword) # 将Sword封装到gailun对象
    gailun.weapon.weapn_attack(gailun, xin) 
    # 通过英雄人物控制武器执行攻击动作
    
    xin.equipment_wea(Musket)
    xin.weapon.weapn_attack(xin,gailun)
    

    依赖和组合让类与类产生关系,增强耦合性。

  • 相关阅读:
    zoj1151 zoj1295 Word Reversal 字符串的简单处理
    zoj 1539 Lot 简单DP 记忆化
    ZOJ 2042 Divisibility (DP)
    zoj 1889 ones 数学
    Kubernetes Ingress 日志分析与监控的最佳实践
    如何使用Data Lake Analytics创建分区表
    如何在Data Lake Analytics中使用临时表
    阿里敏捷教练:多团队开发一个产品的组织设计和思考
    阿里工程师开发了一款免费工具,提升Kubernetes应用开发效率
    触手可得的云原生 | 阿里云中间件发布多项新功能​
  • 原文地址:https://www.cnblogs.com/yzm1017/p/11313573.html
Copyright © 2011-2022 走看看