最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • python怎么调用私有属性

    正文概述    2020-07-10   264

    python利用“实例化对象._父类名__私有属性”的调用方法来调用私有属性。方法是:1、创建类并定义私有属性;2、实例化类对象;3、利用“实例化对象._父类名__私有属性”来调用私有属性。

    python怎么调用私有属性

    当我们定义一个类的时候,有时候会定义一个私有属性来辅助开发。在其它语言中经常会用到 private 来修饰这个属性为私有属性。可是你知道么?同样为私有属性,有的开发语言中是真私有属性,有的是假私有属性。

    例如 :在 OC 开发过程中出现的私有属性就是假私有属性,通过 runtime 可以很方便拿到私有属性并进行修改。同出师门,swift 中的私有属性就是真私有属性,通常需要 private 来修饰。

    那么在 python 开发中,我们如何来定义一个私有属性呢?作为约定俗成,我们通常在属性的前面加两个下划线,即__age就代表是一个私有属性。

    也许你会有疑问,这个属性是真私有属性还是假私有属性?

    首先我们定义一个类,并在该类中初始化两个属性,其中一个为私有属性。如下所示:

    class Person(object):
    # 构造函数
    def __init__(self, name):
        self.name = name
        self.__age = 18

    创建一个对象,并给初始化name 属性。

    obj = Person("lily")
    print(obj.name)

    运行该模块就会打印出:lily

    那么私有属性该如何访问:

    print(obj.__age)

    运行模块之后,控制台会打印出:

    'Person' object has no attribute '__age'

    既然 age作为私有属性,所以该属性就不能直接访问。

    正确调用方法为:

    print(obj._Person__age)

    控制台就可以打印出:18

    同样,可以重新给私有属性赋值

    obj._Person__age = 20

    print(obj._Person__age)

    控制台就可以打印出:20

    如果我们另外创建一个类并继承 Person,该如何访问自己的私有属性并做修改呢?

    class Student(Person):
        def __init__(self):
            self.__gender = 'male'
            stu = Student()
            print(stu._Student__gender)

    控制台会打印出来:male

    如果访问父类的私有属性呢?

    print(stu._Person__age)

    这个时候,控制台会打印:'Student' object has no attribute '_Person__age'

    这进一步证明了,私有属性是无法被继承的。

    由此可知,在 Python 中私有属性为假私有属性。那为什么不从语法上保证 private 字段的私密性呢?用最简单的一句话来说:We are all consenting adults here。正如Python 程序员的观点:开放要比封闭好。

    综上所述:

    Python 编译器无法严格保证 private 字段的私密性。

    只有当子类不受自己控制的时候,才可以考虑使用 private 属性来避免名称冲突。

    推荐课程:Python面对对象(Corey Schafer)


    起源地下载网 » python怎么调用私有属性

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元