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