zoukankan      html  css  js  c++  java
  • day 23-1 类的命名空间、组合

    类的命名空间

    类与对象命名空间
      类里 可以定义两种属性
      静态属性
      动态属性

    类中的静态变量 可以被对象和类调用
    对于不可变数据类型来说,类变量最好用类名操作
    对于可变数据类型来说,对象名的修改是共享的,重新赋值是独立的


    类里的名字有 类变量(静态属性量)+ 方法名(动态属性)
    对象里的名字 对象属性
    对象 —— > 类
    对象找名字 : 先找自己的 找类的 再找不到就报错
    对象修改静态属性的值
    对于不可变数据类型来说,类变量最好用类名操作
    对于可变数据类型来说,对象名的修改是共享的,重新赋值是独立的

    实例化方法共享类变量

    #实例化方法共享类变量
    class Foo():
        count = 0
        def __init__(self):
            Foo.count += 1
    
    f = Foo()
    f2 = Foo()
    print(f.count)  #输出结果:2
    print(f.count)  #输出结果:2

    认识绑定方法
      当对象调用方法的时候,就是把对象里面的值传给了方法,这时就发生了绑定关系

    def func():pass
    print(func)     # <function func at 0x0000000000731488>
    
    class Foo:
        def func(self):
            print('func')
        def func2(self):
            pass
    f1 = Foo()
    
    print(f1)       #<__main__.Foo object at 0x000001F3545E0FD0>
    print(Foo.func) #<function Foo.func at 0x00000243F1521AE8>
    print(f1.func)  #绑定方法 bound method
    print(f1.func2)
    #<bound method Foo.func of <__main__.Foo object at 0x00000243F1520FD0>>
    #<bound method Foo.func2 of <__main__.Foo object at 0x00000243F1520FD0>>

    组合

    人狗大战之装备化

    #人狗大战之装备化
    class Person():
        def __init__(self,name,aggr,hp):
            self.name = name
            self.aggr = aggr
            self.hp = hp
        def bite(self,dog):
            dog.hp -=self.aggr
        def get_weapon(self,weapon):
            self.weapon = weapon
            self.aggr += weapon.aggr
    
    class Weapon:
        def __init__(self,name,aggr):
            self.name = name
            self.aggr = aggr
    
        #技能
        def hand18(self,dog):
            dog.hp -= self.aggr * 2
            
    class Dog():
        def __init__(self,name,aggr,hp):
            self.name = name
            self.aggr = aggr
            self.hp = hp
        def bite(self,person):
            person.hp -=self.aggr
    
    per = Person('鸟人',20,150)
    dog = Dog('二哈',50,200)
    wuqi = Weapon('打狗棒',50)
    
    #print(dog.__dict__)
    
    #装备打狗棒
    #per.get_weapon(wuqi)
    #print(per.weapon)
    #per.bite(dog)
    #print(dog.hp)
    
    #使用技能(组合)
    per.jineng = wuqi
    per.jineng.hand18(dog)
    print(per.jineng.name)
    print(per.hp)
    print(dog.hp)

    组合

      一个类的对象是另外一个类对象的属性(一个对象做了别人的属性就叫组合)
      什么有什么的关系

    class A:
        def __init__(self,name):
            self.name = 'ysg'
    class B:
        def __init__(self,year,month,day):
            self.year = year
            self.month = month
            self.day = day
    
    b = B(18,1,17)
    a = A()
    a.birth = b
    print(b.year)
    print(a.birth.year) 
  • 相关阅读:
    kuryr环境搭建
    使用docker搭建kafka环境
    记一次解决curl https证书问题
    一篇精彩的洗地文
    个人知识管理利器wiz
    Markdown写作
    用Bottle开发web程序(二)
    用Bottle开发web程序(一)
    Magnum Kubernetes源码分析(二)
    DVWA(九):File Upload 全等级文件上传
  • 原文地址:https://www.cnblogs.com/ysging/p/10231239.html
Copyright © 2011-2022 走看看