Python类私有变量

此内容相对简单,仅在使用子类过程中,注意私有变量的特性


class Person(object):

    __name='Foo' # 命名空间变为:_Person__name

    def __init__(self):
        self.__age=10  # 命名空间变为:_Person__age

    def __height(self): # 命名空间变为:_Person__height
        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()

# print(p.__name) # Person' object has no attribute '__name'
# print(p.__height) # Person' object has no attribute '__height'

"""
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())
# 打印结果:180cm
print(s._SubPerson__height())
# 打印结果:170cm
# 说明父类__height方法与子类的_height完全独立

print(s.outside_access())
"""
打印结果:
form SubPerson
170cm
显然父类非私有方法已被子类覆盖
"""

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值