1 def bark(animal):
2 animal.bark()
3
4
5 # 对于静态语言来说,传入的对象一定是指定的数据类型,否则就报错
6 class Animal:
7 def bark(self):
8 print('嗷嗷叫')
9
10
11 class Dog(Animal):
12 def bark(self):
13 print('汪汪叫')
14
15
16 class Cat(Animal):
17 def bark(self):
18 print('喵喵叫')
19
20
21 class Duck(Animal):
22 def bark(self):
23 print('嘎嘎叫')
24
25
26 # 将类实例化
27 dog = Dog()
28 cat = Cat()
29 duck = Duck()
30
31 bark(dog)
32 bark(cat)
33 bark(duck)
34
35
36 # 私有化
37 # python中没有那种仅限从一个对象内部访问的私有变量
38 # 在python中以一个下划线开头的名称(例如:_spam),应当被看做为私有
39 # 还有一种方式就是以双下划线开头,仅仅是以双下划线开头的特殊方法分开
40 class A:
41
42 _arg1 = 'A'
43
44 def _method(self):
45 print('我是一个私有方法')
46
47
48 a = A()
49 print(a._arg1)
50 a._method()
51
52
53 # 双下划线开头
54 class B:
55
56 __arg2 = 'B'
57
58 def __method(self):
59 print('我是一个私有方法')
60
61
62 b = B()
63 # print(b.__arg2) # 会报错
64 # b.__method() # 会报错
65
66 # 其实还是可以访问
67 # 这种限制访问的原理,定义的时候把名称改写了
68 # _classname__属性/方法名
69 print(b._B__arg2)
70 b._B__method()