-
Notifications
You must be signed in to change notification settings - Fork 1
/
鸭子类型和多态.py
70 lines (61 loc) · 1.45 KB
/
鸭子类型和多态.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#! -*- encoding=utf-8 -*-
class Cat(object):
def say(self):
print("i am a cat")
class Dog(object):
def say(self):
print("i am a dog")
class Duck(object):
def say(self):
print("i am duck")
animal = Cat
animal().say()
# Java做法
'''
class Animal():
def say(self):
print("i am a animal")
class Cats(Animal):
def say(self):
print("i am a cat")
'''
animal_list = [Cat, Dog, Duck]
for animal in animal_list:
animal().say()
'''
他们都有say,所以可以理解他们三个类都是属于一种类型
'''
print("##########################################################")
a = ["abc1", "abc2"]
b = ["abc2", "abc"]
name_tuple = ("abc3", "abc4")
name_set = set()
name_set.add("abc5")
name_set.add("abc6")
'''
a.extend(b)
print(a)
输出:['abc1', 'abc2', 'abc2', 'abc']
'''
'''
a.extend(name_tuple)
print(a)
输出:['abc1', 'abc2', 'abc3', 'abc4']
'''
'''
a.extend(name_set)
print(a)
输出:['abc1', 'abc2', 'abc5', 'abc6']
'''
'''
extend接收一个可迭代的对象,所以不仅仅局限于说list啊set啊这些常用的,
我们自己写的类实现了可迭代的方法,也可以传给这个函数
'''
'''
鸭子类型与魔法函数结合的理解
如果你自己实现了某些魔法函数,那么你自己写的类就可以被称为某些类型。
比如你实现了迭代相关的魔法函数:
__iter__
__next__
那么你自己的类就可以被称为一个可迭代对象,以此类推
'''