python---面向对象8--类的多态和私有化

 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()

 

posted @ 2022-03-07 18:30  WJ-HAHA  阅读(20)  评论(0编辑  收藏  举报