python 中的 _ 和__ 开头的变量和方法

发布时间 2023-10-03 01:06:06作者: Orientation
class A:
    _variable_one_class = '_variable_one_class'
    __variable_two_class = '__variable_two_class'

    def __init__(self):
        self._variable_one = '_variable_one'
        self.__variable_two = '__variable_two'

    def _one_sub_func(self):
        print('_one_sub')

    def __two_sub_func(self):
        print('__two_sub_func')

    def test(self):
        print(self.__variable_two)


class B(A):
    def test(self):
        pass


def _one_sub_func():
    print('_one_sub_func')


def __two_sub_func():
    print('__two_sub_func')

a = A()
b = B()

# 属性
print(A.__dict__)   # 本质上,双下划线的变量或者方法 在A.__dict__ 中 __开头的方法或者属性以_A开头存储的
print(a._variable_one)           # 实例的变量,实例能访问,可以被继承
print(a._variable_one_class)     #类变量, 实例能访问,可以被继承
# print(a.__variable_two)        实例的变量 实例不能访问,不可以被继承
# print(a.__variable_two_class)  类变量 实例不能访问,不可以被继承
print(A._variable_one_class)
print(B._variable_one_class)

# 方法 属性一样
a._one_sub_func()
# a.__two_sub_func()
B._one_sub_func(a)
A._one_sub_func(a)


variable='variable' # import * /包名 可用
_variable_one_class = '_variable_one_module' # import * 不可用,from XX import XX 语法 可用
__variable_two_class = '__variable_two_module' # import * 不可用,from XX import XX 语法 可用