Python 面向对象编程:类的多种应用与设计模式
1. 函数重载与多态
在一些面向对象的编程语言中,多态意味着根据函数参数的类型签名来重载函数。但在 Python 中,由于没有类型声明,这种基于类型签名的重载概念并不适用。Python 中的多态基于对象接口,而非类型。
1.1 尝试通过参数列表重载方法
你可能会尝试通过参数列表来重载方法,如下所示:
class C:
def meth(self, x):
...
def meth(self, x, y, z):
...
这段代码可以运行,但由于 def
语句只是将一个对象赋值给类作用域中的一个名称,所以方法函数的最后一个定义将是唯一保留的定义。这就好比先执行 X = 1
,然后执行 X = 2
,最后 X
的值将是 2。
1.2 基于类型选择的实现
可以使用类型测试和参数列表工具来实现基于类型的选择:
class C:
def meth(self, *args):
if len(args) == 1:
...
elif type(args[0]) == int:
...
不过,通常不建议这样做。