此内容相对简单,仅在使用子类过程中,注意私有变量在子类继承过程的特性
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
| class Person(object):
__name='Foo'
def __init__(self): self.__age=10
def __height(self): print('form',self.__class__.__name__)
return '180cm'
def outside_access(self): print('form',self.__class__.__name__) return self.__height()
print(Person.__dict__) ''' {'_Person__name': 'Foo', '__doc__': None, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__init__': <function Person.__init__ at 0x1143171e0>, '_Person__height': <function Person.__height at 0x114317268>, 'outside_access': <function Person.outside_access at 0x1143172f0>}
''' p=Person()
""" Python 为何要在类私有变量前加上类名作为变量名称 目的:当子类覆盖父类时,保证了子类的同名私有变量_subclass__Foo不会覆盖同名的_parentclass__Foo 或者说:父类不想让子类覆盖自己的方法,可通过将方法私有化达到目的,这个子类指:同一模块内的方法,或被引入到其他模块当中的子类 """
class SubPerson(Person): def __height(self): return '170cm'
def outside_access(self): print('form',self.__class__.__name__) return self.__height()
s=SubPerson() print(s._Person__height())
print(s._SubPerson__height())
print(s.outside_access()) """ 打印结果: form SubPerson 170cm 显然父类非私有方法已被子类覆盖 """
|