zoukankan      html  css  js  c++  java
  • python_面向对象,类名称空间,对象名称空间,组合

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

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

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

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

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

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

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

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

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

     1 # job1 = 'teacher'
     2 # class A:
     3 #     home = '老男孩教育'
     4 #     name = '武大'
     5 #     def __init__(self, name, age):
     6 #         self.name = name
     7 #         self.age = age
     8 #     def job(self):
     9 #         print('我在开车.....')
    10 
    11 # 查询顺序
    12 # 对象的查询顺序:先从对象空间去找,对象的空间没有此变量或者方法,通过对象中的类对象指针去类中寻找.
    13 # obj1 = A('oldboy',1000)
    14 # obj1 = A('oldboy',1000)
    15 # obj1 = A('oldboy',1000)
    16 # obj1 = A('oldboy',1000)
    17 # print(obj1.name)
    18 # print(obj1.job)
    19 # print(obj1.home)
    20 # 类的查询顺序: 直接从类本身找.
    21 # print(A.name)
    查询顺序
    1 对象的问题
    2 # 无论创建多少对象,都是开辟独立的空间,各个对象之间不能互相查找,干扰.
    3 # obj1 = A('oldboy',1000)
    4 # obj2 = A('alex',10000)
    5 
    6 # import girldriver
    7 # girldriver.func()
    对象的问题
     1 # 计算一个类实例化多少个对象
     2 
     3 # class A:
     4 #     home = '老男孩教育'
     5 #     name = '武大'
     6 #     count = 0
     7 #     def __init__(self, name, age):
     8 #         A.count = A.count + 1
     9 #         self.name = name
    10 #         self.age = age
    11 #     def job(self):
    12 #         print('我在开车.....')
    13 #
    14 # obj1 = A('alex1',1000)
    15 # obj2 = A('alex2',1000)
    16 # obj3 = A('alex3',1000)
    17 # obj4 = A('alex4',1000)
    18 # print(A.count)
    计算一个类实例化多少个对象

    组合: 给一个类的对象,封装一个属性,这个属性是另一个类的对象.

     1 class Game_role:
     2     def __init__(self, name, ad, hp):
     3         self.name = name
     4         self.ad = ad
     5         self.hp = hp
     6     def attack(self,obj1):
     7         obj1.hp = obj1.hp - self.ad
     8         print('%s攻击%s,%s掉了%s血,还剩%s血'%(self.name,obj1.name,obj1.name,self.ad,obj1.hp))
     9     def package_weapon(self,wea):
    10         self.weapon = wea
    11 
    12 class Sword:
    13     def __init__(self,name,ad):
    14         self.name = name
    15         self.ad = ad
    16     def fight(self,p1,p2):
    17         p2.hp = p2.hp - self.ad
    18         print('%s 用 %s 砍了 %s一刀,%s 还剩%s血' %(p1.name,self.name,p2.name,p2.name,p2.hp))
    19 # aduan = Game_role('啊段', 10, 100)
    20 # ts = Game_role('泰森', 120, 300)
    21 # Slaughter_knife = Sword('杀猪刀',200)
    22 # 这么写不好,动作的发起人是人而不是刀本身
    23 # Slaughter_knife.fight(aduan,ts)
    24 # 下面是符合逻辑的
    25 # aduan.package_weapon(Slaughter_knife)  # 给aduan 这个对象封装了一个weapon属性这个属性值为Slaughter_knife
    26 # aduan.weapon.fight(aduan,ts)
    27 # ts.attack(aduan)
    28 # print(aduan.weapon)
    29 # print(aduan.weapon.name)
    30 # aduan.weapon.fight(aduan,ts)
    组合
  • 相关阅读:
    解决:oracle+myBatis ResultMap 类型为 map 时,表字段类型有 Long/Blob/Clob 时报错
    总结:独立开发 jar 包组件——功能主要是支持查询数据库的所有表数据
    解决 iframe 后退不是主页面后退(浏览器 history)问题
    解决访问 jar 包里面的字体报错:OTS parsing error: incorrect file size in WOFF header
    html 如何访问 jar 包里面的静态资源(js、css、字体等)
    css3 实现打字机效果
    js 图形验证码
    input 设置 flex:1不起作用
    vue 样式加scoped不起作用
    node-mongoose开发中常见警告或问题-持续更新
  • 原文地址:https://www.cnblogs.com/liuye1990/p/9239037.html
Copyright © 2011-2022 走看看