• 20180724 (面向对象:类的命名空间和查询顺序丶组合)


    一.类的名称空间

    类名()  产生了一个含有对象指针的空间

    先执行代码 从上向下执行 

    首先执行到class的时候,创建了一个Person类的空间,其中有静态变量和方法以及方法的内存地址

    之后执行到p1 = Person()的时候,又创建了一个p1的实例空间,当还没读到括号里面的参数的时候,此时该实例空间里只有一个指示牌是指向Person类空间的

    当执行到括号里面的内容的时候,此时实例空间里多了country = "菲律宾",name = "alex",age = 42,height = 175

    查询顺序:  对象.属性:先从对象(实例)空间里面找,如果找不到,再从类的空间里面找,再找不到,到父类里面找

           类名.属性:先从本类空间里面找,如果找不到,就到父类找

    对象与对象之间是相互独立的

    例如:

      如图代码.如果p1下面有添加了一行代码(p2 = Person("美国","wusir","男",38,180))      则当程序执行到p2的时候就又创建了一个p2的实例空间,与p1是相互独立的,但都有一个指示牌,指向类Person空间

    例如:

      计算一个类,实例化多少个对象

      class Person:

        count = 0

        def __init__(self):

          Person.count = Person.count(self.count 在这里是引用) + 1

        p1 = Person()

        p2 = Person()

        p3 = Person()

        Person.count = 6                    ======>通过类名可以更改我的类中的静态变量,但是通过对象,不能改变只能引用类中的静态变量

        print(Person.count)

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

    例如:

      class Person:

        def __init__(self,name,ad,hp):

          self.name = name

          self.ad = ad

          self.hp = hp

        def attack(self,p):

          p.hp = p.hp - self.ad

          print("%s攻击了%s,%s掉了%s血,还剩%s血" % (self.name,p.name,p.name,self.ad,p.hp))

        def wuqi(self,wea):

          self.wea = wea

      class Weapons:

        def __init__(self,name,ad):

          self.name = name

          self.ad = ad

        def fight(self,p1,p2):

          p2.hp = p2.hp - self.ad

          print("%s拿%s攻击了%s,%s掉了%s血,还剩%s血" % (p1.name,self.name,p2.name,p2.name,self.ad,p2.hp))

      p1 = Person("盖伦",20,150)

      p2 = Person("提莫",50,100)

      w1 = Weapons("斧子",50)

      w2 = Weapons("双节棍",80)

      p1.attack(p2)                                  ===========>盖伦攻击了提莫,提莫掉了20血,还剩80血

      p1.wuqi(w1)

      p1.wea.fight(p1,p2)                           =======>盖伦拿斧子攻击了提莫,提莫掉了50血,还剩30血

  • 相关阅读:
    移动前端webApp开发点滴积累20140524
    做业务系统与公众产品的区别
    浅谈浏览器兼容性问题-(4)工具及调试
    浅谈浏览器兼容性问题-(3)他山之石整理
    浅谈浏览器兼容性问题-(2)本人解决方案理解与积累
    使用Using的注意事项
    [转]VMPlayer的Briged网络配置
    [转]移动互联网应用技术架构简介-Restful服务
    理解WCF中的Contracts
    [翻译]在ASP.NET Web API中通过OData支持查询和分页
  • 原文地址:https://www.cnblogs.com/lhy979/p/9362007.html
Copyright © 2020-2023  润新知