[py]python的私有变量

本文详细介绍了Python中如何使用双下划线前缀定义类的私有成员,并展示了私有属性如何防止子类重写导致的意外覆盖。通过具体实例说明了私有属性在继承中的作用。

参考

python中并没有真正意义上的私有成员,它提供了在成员前面添加双下划线的方法来模拟类似功能。具体来说:

    _xxx 表示模块级别的私有变量或函数
    __xxx 表示类的私有变量或函数

这被称为name nangling,将__membername替换为_classname__membername。
这样从语法上实现了私有成员不能用classinstance.__membername访问,但是任然可以用
classinstance._classname__membername访问。

python类的私有属性

class A(object):
    def __init__(self):
        self.age = 22

a = A()

class B(object):
    def __init__(self):
        self.__age = 22

b = B()

1312420-20180119130511599-1264576563.png

class私有属性防止子类同名重写

子类继承父类age属性,并重写,后访问父类age,也变了
class A(object):
    def __init__(self):
        self.age = 42

    def foo(self):
        print self.age


class B(A):
    def __init__(self):
        super(A, self).__init__()
        self.age = 21

    def bar(self):
        print self.age


p = B()
p.bar()
p.foo()

//21  21
将父类的__age私有化后,子类继承重写该变量,访问父类方法也不会改变
class A(object):
    def __init__(self):
        self.__age = 42

    def foo(self):
        print self.__age


class B(A):
    def __init__(self):
        super(B, self).__init__()
        self.__age = 21

    def bar(self):
        print self.__age


p = B()
p.bar()
p.foo()

//21  42

转载于:https://www.cnblogs.com/iiiiiher/p/8316366.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值