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)
上一篇:Java学习者的建议:把自己从一个疯狂下载者&资料的奴隶变成一个真正的学习者


下一篇:单例模式的七种实现-Singleton(Java实现)