• 面向对象--类


    面向对象--类

    1.从空间的角度研究类

    1.何处添加对象属性
      在类的__init__可以添加,在类的方法中也可以添加,在类的外部也可以添加
        
    2.何处添加类的属性
      在类的内部,在类的外部
        
    3.对象空间和类空间的关系
    查询顺序:
    对象.名字:对象空间->类对象指针->类空间->父类空间
    类名.名字:类空间->父类空间
    对象空间与类空间有相同的名字,对象,先从对象空间找
    

    2.类与类的关系

    1.依赖关系(主从之分)
    将一个类的类名或者对象传入另一个类的方法中
    
    class Elephant:
        def __init__(self,name):
            self.name = name
        def open(self,obj):
            print(f"{self.name} 1 2 3 开门")
            obj.be_open()
        def close(self):
            print(f"{self.name} 3 2 1 关门")
            
    class Refrigerator:
        def __init__(self,name):
            self.name = name
        def be_open(self):
            print(f"{self.name}冰箱被打开了")
        def be_colse(self):
            print(f"{self.name}冰箱被关闭了")
            
    qiqi = Elephant("奇奇")
    haier = Refrigerator("海尔")
    qiqi.open(haier)
    
    #奇奇 1 2 3 开门
    #海尔冰箱被打开了
    
    2.组合关系
    给一个类的对象封装一个属性,此属性为另一个类的对象
    
    class Boy:
        def __init__(self,name,gf = None):
            self.name = name
            self.gf = gf
        def dinner(self):
            if self.gf:
                print(f"{self.name}请女朋友{self.gf}一起烛光晚餐")
            else:
                print("单身狗不吃饭")
                
    qiqi = Boy("奇奇")
    qiqi.dinner()
    #单身狗不吃饭
    
    qiqi = Boy("奇奇")
    qiqi.gf = "六六"   #gf为一个字符串的数据
    qiqi.dinner()
    #奇奇请女朋友六六一起烛光晚餐
    
    
    class Boy:
        def __init__(self,name,gf = None):
            self.name = name
            self.gf = gf
        def dinner(self):
            if self.gf:
                print(f"{self.name}请他的{self.gf.age}岁的女友{self.gf.name}一起烛光晚餐")
            else:
                print("单身狗不吃饭")
        def gf_skill(self):
            print(f"{self.name}的女朋友技能:")
            self.gf.skill()
            
    class Girl:
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def skill(self):
            print(f"{self.name}会直播")
            
    qiqi = 	Boy("奇奇")
    liuliu = Girl("六六",18)
    qiqi.gf = liuliu
    qiqi.dinner()
    #奇奇请他的18岁的女友六六一起烛光晚餐
    qiqi.gf_skill()
    #奇奇的女朋友技能:
    #六六会直播
    
                  
    
    class GameRole:
        def __init__(self,name,ad,hp):
            self.name = name 
            self.ad = ad
            self.hp = hp
    class Weapon:
        def __init__(self,name,ad):
        	self.name = name
            self.ad = ad
        def weapon_attack(self,p1,p2):
        	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)
    sword.weapon_attack(gailun,xin)
    #盖伦利用宝剑给了赵信一下,赵信掉了15血,还剩65血
    #1.功能虽然实现了,但是逻辑上不合理,应该是人物对象调用方法
    #2.游戏人物本身就应该绑定武器属性
    
    
    
    class GameRole:
        def __init__(self, name, ad, hp):
            self.name = name
            self.ad = ad
            self.hp = hp
        def equipment_wea(self,wea):
            self.weapon = wea
    
    
    class Weapon:
        def __init__(self, name, ad):
            self.name = name
            self.ad = ad
    
        def weapon_attack(self, p1, p2):
            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)
    gailun.weapon.weapon_attack(gailun, xin)
    #盖伦利用宝剑给了赵信一下,赵信掉了15血,还剩65血
    

  • 相关阅读:
    set RowCount 与 top n
    Ubuntu 12.04 64bit 安装编译GCC 4.1.2 绝对原创
    C语言第11课
    Cocos2d-x之MenuItem
    wamp 已安装cakephp Fatal error: You must enable the intl extension to use CakePHP. in XXX
    jQuery性能优化38建议---最引人注目的用户体验!
    在面对变化,撇开NO
    批学习
    JAVA修饰符类型(public,protected,private,friendly)
    【Espruino】NO.15 nRF24L01+无线收发器
  • 原文地址:https://www.cnblogs.com/tutougold/p/11305639.html
Copyright © 2020-2023  润新知