python面向对象之多态,类属性,类方法,静态方法

目录

多态

类属性

类方法

静态方法


多态

多态可以实现通用的代码来适应需求的不断变化

步骤

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()

上一篇:php 操作redis 常见方法示例


下一篇:【OpenCV学习】(五)图像运算