通过对象定义的属性
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__())