码迷,mamicode.com
首页 > 其他好文 > 详细

14.11类的成员修饰符

时间:2018-04-13 16:10:19      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:Python   成员修饰符   访问权限   

成员修饰符

类的所有成员分为:字段,方法
  公有成员,在任何地方都能访问
  私有成员,只有在类的内部才能访问
私有成员和公有成员的定义不同:私有成员命名时,前两个字符是下划线。(特殊成员除外,例如:initcall等)
私有成员和公有成员的访问限制不同:
静态字段:
公有静态字段:类可以访问,类内部可以访问;派生类中可以访问
私有静态字段:仅类内部可以访问
普通字段:
  公有普通字段:对象可以访问;类内部可以访问;派生类中可以访问
  私有普通字段:仅类内部可以访问
方法、属性的访问与上述方式相似,即,私有成员只能在类内部使用。
PS:私有成员若非要访问的话,可以通过 对象._类__属性名 来访问。

私有普通字段

# -*-coding:utf-8 -*-
__author__ = ‘xiaojiaxin‘
__file_name__ = ‘成员修饰符‘

class foo:
    def __init__(self,name,age,__age):
        self.name=name
        self.age=age
        self._age=age   #私有,外部无法直接访问

    def show(self):
        return self._age  #间接访问私有字段

obj=foo("jiaxin",10,1)
print(obj.name)
print(obj.age)
print(obj._age)
print(obj.show())

私有静态字段

class Hoo:
    __v="123"

    def __init__(self):
        pass

    def show(self):
        return Hoo.__v

    @staticmethod
    def staticmd():
        return Hoo.__v

#print(Hoo.__v)   #静态私有字段不能被外部访问

obj2=Hoo()
print(obj2.show()) #静态私有字段可以间接被外部访问
# 123

obi3=Hoo.staticmd()
print(obi3)
# 123

私有普通方法

class qoo:

    def __f1(self):
        return "f1"

    def f2(self):
        r=self.__f1()
        return r
obj4=qoo()
print(obj4.f2())
# f1

派生类不能继承基类的私有字段

class F:

    def __init__(self):
        self.ge="dad1"
        self.__gene="dad"

class S(F):

    def __init__(self,name):
        self.name="son"
        self.__age=10
        super(S,self).__init__()

    def show(self):
        print(self.name)
        print(self.__age)
        print(self.ge)
        #print(self.__gene)   #无法访问父类的私有字段,只能通过继承公有才行

s=S("jiaxin")
s.show()

14.11类的成员修饰符

标签:Python   成员修饰符   访问权限   

原文地址:http://blog.51cto.com/10777193/2102954

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!