多态
说明:调用不同子类对象相同父类方法。
步骤:
定义父类,并提供公共方法
定义子类,子类中重写父类方法
传递子类给调用者,可以看到子类执行效果不同
class 复仇者联盟():
def method(self): #定义父类 并提供公共方法
print('打灭霸')
class 钢铁侠(复仇者联盟): #子类重写父类同名的方法
def method(self):
print('空中作战')
class 美国队长(复仇者联盟): #子类重写父类同名的方法
def method(self):
print('在地面作战')
class 神盾局():
def command(self,复仇者联盟): #神盾局召唤哪一派系的英雄是不一定的.但是都在复联里 所以以复联做形参
return 复仇者联盟.method()
帮派1 = 钢铁侠()
帮派2 = 美国队长()
对象 = 神盾局()
对象.command(帮派1) #调用方法:把对象放进去
对象.command(帮派2)
空中作战
在地面作战
类属性
设置和访问类属性
class Warrior():
god = 'Athena'
golden = Warrior()
bronze = Warrior()
#通过类访问 格式:类.类属性
print(Warrior.god)
#通过对象访问 格式:对象.类属性
print(golden.god)
Athena
Athena
修改类属性
说明:只能通过类对象来修改。
lass Warrior():
god = 'Athena'
golden = Warrior()
bronze = Warrior()
Warrior.god = 'Harris'
print(Warrior.god)
Harris
类的调用方法
类方法
类方法特点:需要用装饰器@classmethod来标志其为类方法。
对于类方法,第一个参数必须是类对象。一般以cls作为第一个参数。
使用场景:当方法中需要使用类对象,定义类方法。
class Warrior():
weapon = 'gold cloth'
@classmethod #缩进
def gweapon(cls):
return cls.weapon
i = Warrior()
print(i.gweapon())
gold cloth
静态方法
说明:方法中不需要使用实例方法和类方法。
class Warrior():
@staticmethod
def method():
print('同样的招式只能对圣斗士使用一次')
i = Warrior()
i.method()
Warrior.method() #类和对象都可以调用
同样的招式只能对圣斗士使用一次
同样的招式只能对圣斗士使用一次