在Python中可以通过在变量属性以及方法属性是否有下划线“_”进行区分public、protected、private类型。

public类型

在python中数据和方法默认都是pubic类型的,此时方法和变量名都没有下划线。
1、 xx 没有以下划线开头的变量或者方法是public类型。
2、public类型可以被子类、类内以及类外被访问。

protected类型

1、 _xx 以单下划线开头表示的是protected类型的变量或者方法。
2、保护类型只能允许其本身与子类进行访问。

private类型

1、 __xx 双下划线表示的是私有类型的变量或者方法。
2、private类型只能允许类内进行访问。

特列方法

1、 __xx__定义的是特列方法。用户控制的命名空间内的变量或是属性,只有当文档有说明时使用,不要自己定义这类变量。 (就是说这些是python内部定义的变量名)

需要特殊说明的是,在python中没有像其他类似语言的public,private等关键字修饰。同时若方法或者变量是private类型时,其方法或者变量实际上是被转换了,转换规则是 在变量的前端插入类名,再类名前添加一个下划线"_",形成"_ClassName__变量名".

如果我们使用转换后的变量或者方法,我们仍然可以进行访问,即python没有严格意义上的private类型。

class ClassDef(object):
    def __init__(self):
        # public
        self.name = "class_def"
        # private
        self.__age = 29
        # protected
        self._sex = "man"

    def fun1(self):
        print("call public function")

    def __fun2(self):
        print("call private function")

    def _fun3(self):
        print("call protected function")


if __name__ == "__main__":
    # 实例化类对象
    class_def = ClassDef()
    # 调用方法
    # ok
    class_def.fun1()
    class_def._ClassDef__fun2()
    class_def._fun3()
    # 访问数据
    print(class_def._ClassDef__age)
    print(class_def._sex)
    print(class_def.name)

    # error
    # class_def.__fun2()
    # print(class_def.__age)

输出结果:

call public function
call private function
call protected function
29
man
class_def

参考资料:
https://www.cnblogs.com/lijunjiang2015/p/7802410.html

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐