python基础--面向对象基础(类与对象、对象之间的交互和组合、面向对象的命名空间、面向对象的三大特性等) (5)

测试交互

lance = Weapon(\'长矛\',200,6,100) egg = Person(\'egon\',10,1000,600) #创造了一个实实在在的人egg ha2 = Dog(\'二愣子\',\'哈士奇\',10,1000) #创造了一只实实在在的狗ha2 #egg独自力战"二愣子"深感吃力,决定穷毕生积蓄买一把武器 if egg.money > lance.price: #如果egg的钱比装备的价格多,可以买一把长矛 lance.update(egg) #egg花钱买了一个长矛防身,且自身属性得到了提高 egg.weapon = lance #egg装备上了长矛,带上装备 print(egg.money,egg.life_value,egg.aggressivity) print(ha2.life_value) egg.attack(ha2) #egg打了ha2一下 print(ha2.life_value) egg.weapon.prick(ha2) #发动武器技能 print(ha2.life_value) #ha2不敌狡猾的人类用武器取胜,血槽空了一半

按照这种思路一点一点的设计类和对象,最终你完全可以实现一个对战类游戏。

(4)面向对象的命名空间(重点)

我们先看一个例子:

class A: Country = \'中国\' # 静态变量/静态属性 # 存储在类的命名空间里面的,可以通过类名.变量取到 也可以实例化对象之后,通过实例化对象.变量取到 def __init__(self): # 绑定方法,存储在类的命名空间里面的,可以通过类名.函数名调用 # 但是在实际的开发的过程中,我们都是不会用类去调用方法,而是通过实例化对象去调用类里面的方法。 pass def fun1(self): print(self) # <__main__.A object at 0x000001B320899B88> def fun2(self): pass def fun3(self): pass def fun4(self): pass def fun5(self): pass Country = \'美国\' print(Country) # 美国 print(A.__dict__) # {\'__module__\': \'__main__\', \'Country\': \'中国\', \'__init__\': <function A.__init__ at 0x0000015BA6EBB828>, # \'fun1\': <function A.fun1 at 0x0000015BA6EBB3A8>, \'fun2\': <function A.fun2 at 0x0000015BA6EBB4C8>, \'fun3\': <function # A.fun3 at 0x0000015BA6EBB5E8>, \'fun4\': <function A.fun4 at 0x0000015BA6EBB678>, \'fun5\': <function A.fun5 at # 0x0000015BA6EBB708>, \'__dict__\': <attribute \'__dict__\' of \'A\' objects>, \'__weakref__\': <attribute \'__weakref__\' of # \'A\' objects>, \'__doc__\': None} # {\'__module__\': \'__main__\', \'Country\': \'美国\', \'__init__\': <function A.__init__ at 0x0000015BA6EBB828>, # \'fun1\': <function A.fun1 at 0x0000015BA6EBB3A8>, \'fun2\': <function A.fun2 at 0x0000015BA6EBB4C8>, \'fun3\': <function # A.fun3 at 0x0000015BA6EBB5E8>, \'fun4\': <function A.fun4 at 0x0000015BA6EBB678>, \'fun5\': <function A.fun5 at # 0x0000015BA6EBB708>, \'__dict__\': <attribute \'__dict__\' of \'A\' objects>, \'__weakref__\': <attribute \'__weakref__\' of # \'A\' objects>, \'__doc__\': None} # a = A() # print(a.Country) print(A.Country) # 美国 # print(A.__init__()) __init__() missing 1 required positional argument: \'self\' print(A.__init__) # <function A.__init__ at 0x000001C52A64B828> # 类的加载顺序是从上到下一次执行的,安装顺序执行的。 a = A() print(A.Country) a.fun1() #==== A.func1(a) \'\'\' 输出的结果为: 美国 {\'__module__\': \'__main__\', \'Country\': \'美国\', \'__init__\': <function A.__init__ at 0x0000025058C5C828>, \'fun1\': <function A.fun1 at 0x0000025058C5C3A8>, \'fun2\': <function A.fun2 at 0x0000025058C5C4C8>, \'fun3\': <function A.fun3 at 0x0000025058C5C5E8>, \'fun4\': <function A.fun4 at 0x0000025058C5C678>, \'fun5\': <function A.fun5 at 0x0000025058C5C708>, \'__dict__\': <attribute \'__dict__\' of \'A\' objects>, \'__weakref__\': <attribute \'__weakref__\' of \'A\' objects>, \'__doc__\': None} 美国 <function A.__init__ at 0x0000025058C5C828> 美国 <__main__.A object at 0x0000025058C69D48> \'\'\'

这个例子的类的命名空间如下所示。系统会为类创建一个命名空间,存了如下的属性和函数。

python基础--面向对象基础(类与对象、对象之间的交互和组合、面向对象的命名空间、面向对象的三大特性等)

我们在举一个难度大的例子,这个例子设计到继承的知识。

class Animal(object): kind = \'cute\' def __init__(self, name, sex, height, weight): self.name = name self.sex = sex self.height = height self.weight = weight def func(self): print(self.name, self.sex, self.height, self.weight) class Dog(Animal): def __init__(self, name, sex, height, weight, hobby, food): Animal.__init__(self, name, sex, height, weight) self.hobby = hobby self.food = food def func1(self): print(self.name, self.sex, self.height, self.weight, self.hobby, self.food) print(self.kind) class Cat(Animal): def __init__(self, name, sex, height, weight, hobby, food): Animal.__init__(self, name, sex, height, weight) self.hobby = hobby self.food = food def func2(self): print(self.name, self.sex, self.height, self.weight, self.hobby, self.food) self.kind = \'ugly\' print(Animal.kind) dog = Dog(\'小狗\', \'male\', 188, 125, \'喝\', \'猫粮\') cat = Cat(\'小猫\', \'male\', 178, 105, \'玩\', \'猫粮\') dog.func1() cat.func2() dog.func() cat.func() print(Animal.__dict__) \'\'\' 输出的结果为: 小狗 male 188 125 喝 猫粮 cute 小猫 male 178 105 玩 猫粮 cute 小狗 male 188 125 小猫 male 178 105 {\'__module__\': \'__main__\', \'kind\': \'cute\', \'__init__\': <function Animal.__init__ at 0x000001C50873C4C8>, \'func\': <function Animal.func at 0x000001C50873C5E8>, \'__dict__\': <attribute \'__dict__\' of \'Animal\' objects>, \'__weakref__\': <attribute \'__weakref__\' of \'Animal\' objects>, \'__doc__\': None} \'\'\'

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwdxxf.html