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 readdisk writeText readText 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 320 521 322 323 524 3
实现了可以在不考虑对象类型的情况下使用len方法