• 面向对象编程初识②


    1.3类名称空间与对象的名称空间

    创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性

    而类有两种属性:静态属性和动态属性

    • 静态属性就是直接在类中定义的变量
    • 动态属性就是定义在类中的方法

    其中类的数据属性是共享给所有对象的

    >>>id(egg.role)
    4341594072
    >>>id(Person.role)
    4341594072

    而类的动态属性是绑定到所有对象的

    >>>egg.attack
    <bound method Person.attack of <__main__.Person object at 0x101285860>>
    >>>Person.attack
    <function Person.attack at 0x10127abf8> 

    创建一个对象/实例就会创建一个对象/实例的名称空间,存放对象/实例的名字,称为对象/实例的属性

    在obj.name会先从obj自己的名称空间里找name,找不到则去类中找,类也找不到就找父类...最后都找不到就抛出异常

    ps:组合

    面向对象的组合用法

    软件重用的重要方式除了继承之外还有另外一种方式,即:组合

    组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合

    class Person:
    
        def __init__(self,nickname,sex,hp,ad):
            self.nickname = nickname
            self.sex = sex
            self.hp = hp
            self.ad = ad
    
        def attack(self,p1):
            p1.hp -= self.ad
            print('%s攻击了%s,%s还剩%s血量'%(self.nickname,p1.nickname,p1.nickname,p1.hp))
    
        def weapon_attack(self,wea):
            # 武器类的对象封装到人的对象中当做一个属性.就叫做组合.
            self.weapon = wea
    
    class Weapon:
    
        def __init__(self,name,att):
            self.name = name
            self.att = att
    
        def Aux_attack(self,p,p1):
            p1.hp -= self.att
            print('%s利用%s打了%s%s滴血,%s还剩%s滴血' %(p.nickname,self.name,p1.nickname,self.att,p1.nickname,p1.hp))
    
    
    # alex = Person('alex','男',100,20)
    # barry = Person('太白','男',200,50)
    # axe = Weapon('斧子',30)
    # barry.weapon_attack(axe)
    # barry.weapon.Aux_attack(barry,alex)
    
    # axe.Aux_attack(alex)
    # alex.attack(barry)
    # alex.attack(barry)
  • 相关阅读:
    修改windows系统cookie、favorites、desktop等的位置到非系统盘
    第三章 多维随机变量及其分布4
    谈谈Ironpython的应用
    提问的智慧
    第三章 多维随机变量及其分布2
    用C#做 UG NX 二次开发 / NX Secondary Dev. with C#
    第六章 样本与抽样分布
    ufun视频教程(合) / Movie of UFUN
    第四章 随机变量的数字特征2
    第一章 概率论的基本概论
  • 原文地址:https://www.cnblogs.com/caisong/p/9238861.html
Copyright © 2020-2023  润新知