目录
多态
多态可以实现通用的代码来适应需求的不断变化
步骤
1.定义父类提供公共方法,此方法可以不写任何代码,只是来规范子类去具体实现,就是重写
2.定义不同的子类,重写父类方法,具体实现
3.传递⼦类对象给调⽤者,可以看到不同⼦类执⾏效果不同
class Dog:
def work(self):
pass
class ArmyDog(Dog):
def work(self):
print('追敌人')
class DurgDog(Dog):
def work(self):
print('查毒品')
class Person:
def dog_work(self,dog):
dog.work()
p=Person()
p.dog_work(ArmyDog())
p.dog_work(DurgDog())
'''
追敌人
查毒品
'''
dog_work(self,dog) 传递dog而不是其他 就是因为多态,不管干什么的狗都是狗,都会工作,
至于让哪个狗去出击,还是人说的算
类属性
类属性是为了所有实例对象所共有而存在的,所以修改类属性不能通过实例对象而是类对象修改
每个实例对象都会单独创建单独的内存,而类属性仅占共享的一份空间
场景 某项数据不去改变的时候
class Dog:
tooth=10
wangcai=Dog()
xiaohei=Dog()
print(Dog.tooth)
print(wangcai.tooth)
print(xiaohei.tooth)
# 类属性 通过类直接调用或者对象去调用都可以获取
# 但是若去修改类属性必须使用类直接调用修改,不能是实例对象,
# 因为类属性是对所有实例对象共有,一旦实力对象去修改,
# 仅仅是该实例对象的类属性修改了
xiaohei.tooth=20
print(Dog.tooth)
print(wangcai.tooth)
print(xiaohei.tooth)
# 10
# 10
# 10
# 10
# 10
# 20
类方法
装饰器@classmethod来标识
cls 第⼀个参数必须是类对象
场景 类⽅法⼀般和类属性配合使⽤ 作用访问类属性
class Dog:
__tooth=10
@classmethod
def get_tooth(cls):
return cls.__tooth
print(Dog.get_tooth())
静态方法
装饰器@staticmethod来进⾏修饰
静态⽅法既不需要传递类对象也不需要传递实例对象
静态⽅法 也能够通过 实例对象 和 类对象 去访问
场景
当⽅法中 既不需要使⽤实例对象(如实例对象,实例属性),也不需要使⽤类对象 (如类属性、类⽅法、创建实例等)时,定义静态⽅法取消不需要的参数传递,有利于 减少不必要的内存占⽤和性能消耗
说白了 就是静态方法定义场景就是该方法不涉及到类的所有属性方法等 虽然存在该类中,但与该类的其他的属性方法无关联
class Dog:
@staticmethod
def info():
print('静态方法')
Dog.info()
Dog().info()