# 1 多态
# 指同一种行为具有不同的表现形式
# 1.1 多态的前提
# 继承
# 重写
# class Animal:
# def speak(self):
# print('动物')
# class Dog(Animal):
# def speak(self):
# print('狗')
#
# class Cat(Animal):
# def speak(self):
# print('猫')
#
#
# dog = Dog()
# cat = Cat()
# dog.speak()
# cat.speak()
# 1.2 多态性:一种调用方式,不同的执行结果
class Animal(object):
def eat(self):
print('吃猫粮')
class Pig(Animal):
def eat(self):
print('什么都吃')
class Dog(Animal):
def eat(self):
print('吃奥利奥')
# 多态性: 定义一个统一的接口,一个接口多种实现
def test(obj):
obj.eat()
animal= Animal()
pig=Pig()
dog=Dog()
test(animal)
test(pig)
test(dog)
# test函数传入不同的对象,执行不同对象的eat方法
# 2 静态方法
# 使用@staticmethod来进行修饰,静态方法没有self,cls参数的限制
# 静态方法与类无关,可以被转化成函数使用
class Person(object):
@staticmethod
def study(name):
print(f'{name}人类会学习')
# 静态方法既可以使用对象访问也可以使用类访问
Person.study('lwl')
pe=Person()
pe.study('lwl')
# 取消不必要的参数传递,有利于减少不必要的内存占用和性能消耗
# 3.类方法
# 使用装饰器@classmethod来标识为类方法,第一个参数必须是类对象,一般以cls作为第一个参数
# class 类名:
# @classmethod
# def 方法名(cls,形参):
# 方法体
class Person(object):
name='lwl'
@classmethod
def xiaolong(cls):
print("cls",cls) #cls代表类对象本身,类本质上就是一个对象
print('雄安')
print(cls.name)
print(Person)
Person.xiaolong()
# 当方法中需要使用到类对象(如访问私有类属性等),定义类方法
# 类方法一般是配合类属性使用