跳到主要内容

鸭子类型

鸭子类型

不关心对象的类型,也不需要继承,通过一个接口(外部定义的一个函数)来调用对象的方法

#鸭子类型不传参示例:
class Person:
def swim(self):
print("人可以游泳")

class Duck:
def swim(self):
print("鸭子会游泳")

class Fish:
def swim(self):
print("鱼会游泳")

def swiming(tool):
tool.swim() #这里的tool就是后续实例化的对象的对象名,通过传参的方式实现,这就是通过函数中调用类的方式调用对象

a = Person()
b = Duck()
c = Fish()
swiming(a) #通过函数swiming传参的方式,调用对象a,这里的参数也可以是b,也可以是c


#鸭子类型传参示例
• 创建汽车类(Car)含实例属性颜色color,对象方法run,功能是打印XX颜
色小汽车在跑。
• 创建猫类(Cat)含实例属性名字name,对象方法run,功能是打印猫咪XX
在跑。
• 实例化汽车类颜色为红色,实例化猫类,使用公共函数调用对象方法

class Car:
def __init__(self,color):
self.color = color
def run(self):
print(f"{self.color}色小汽车在跑")

class Cat:
def __init__(self,name):
self.name = name
def run(self):
print(f"猫咪{self.name}在跑")

def func(arg): #这里的arg就是传参-即后面实例化类的对象名
arg.run()

a = Car("红") #这一步是实例化汽车类
func(a) #打印结果 红色小汽车在跑
b = Cat("呵呵") #这一步是实例化猫类
func(b) #打印结果 猫咪呵呵在跑

类方法

静态方法 @staticmethod

class Man:
def play(self,name):
self.name = name
print(f"玩{self.name}")

@staticmethod
def time(bbb):
print(f"和{bbb}搞毛线")

a = Man()
a.play("篮球")
b = Man.time("呵呵")