Python----面向对象---鸭子类型

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方法

posted @ 2018-03-20 14:01  xudachen  阅读(163)  评论(0编辑  收藏  举报