Python崇尚鸭子类型,即‘如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子’
python程序员通常根据这种行为来编写程序。例如,如果想编写现有对象的自定义版本,可以继承该对象
也可以创建一个外观和行为像,但与它无任何关系的全新对象,后者通常用于保存程序组件的松耦合度。
例如:利用标准库中定义的各种‘与文件类似’的对象,尽管这些对象的工作方式像文件,但他们没有继承内置文件对象的方法
1 class Disk: 2 def read(self): 3 print('disk read') 4 5 def write(self): 6 print('disk write') 7 8 9 class Text: 10 def read(self): 11 print('Text read') 12 13 def write(self): 14 print('Text write') 15 16 17 disk = Disk() 18 text = Text() 19 20 disk.read() 21 disk.write() 22 23 text.read() 24 text.write()
结果为:
disk read
disk write
Text read
Text write
还有一种序列类型:序列类型有多种形态:字符串,列表,元组,但他们直接没有直接的继承关系
1 s = str('hello') 2 l = list([1, 2, 3]) 3 t = tuple(('a', 'b', 'c')) 4 5 print(l.__len__()) 6 print(s.__len__()) 7 print(t.__len__()) 8 9 10 def len(obj): 11 return obj.__len__() 12 13 14 print(len(l)) 15 print(len(s)) 16 print(len(t)) 17 18 结果为: 19 3 20 5 21 3 22 3 23 5 24 3
实现了可以在不考虑对象类型的情况下使用len方法