关于类的私有属性

通过对象定义的属性

class MyClass(object):
   def func(self):
      print(self._MyClass__abc)



obj = MyClass()

# 在类外是不能通过对象定义私有属性
# 通过obj定义的的属性, 只存在于obj内, 不存在class内
obj._MyClass__abc = 123
obj.func()


print(MyClass.__dict__)
{
    '__module__': '__main__',
    'func': <function MyClass.func at 0x000001C94957E9D8>,
    '__dict__': <attribute '__dict__' of 'MyClass' objects>,
    '__weakref__': <attribute '__weakref__' of 'MyClass' objects>,
    '__doc__': None
}

# 结果刚刚设置的私有属性是对象的属性
print(obj.__dict__)
# {'_MyClass__abc': 123}

特殊的方法添加私有属性

class MyClass(object):
    def __str__(self):
        # 没有定义类的私有方法, 等在外面赋值
        return self.__abc

obj = MyClass()


# 给类添加双下划綫属性
MyClass.__a__ = 100

# 给类添加私有属性
MyClass._MyClass__abc = 123


# 查看类内所有属性
print(MyClass.__dict__)
{
    '__module__': '__main__',
    '__str__': <function MyClass.__str__ at 0x0000018F4CA4E9D8>,
    '__dict__': <attribute '__dict__' of 'MyClass' objects>,
    '__weakref__': <attribute '__weakref__' of 'MyClass' objects>,
    '__doc__': None, '__a__': 100,
    '_MyClass__abc': 123
}


# 查看对象内所有属性
print(obj.__dict__)
# {}


# 调用类的私有属性
print(obj.__str__())

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容