class A:
# 定义一个私有的类属性,用于存储实例化出来的对象
_isinstance = None
def __new__(cls):
print("调用了new方法")
# 判断如果_isinstance为None,则创建一个实例,否则直接返回_isinstance
if not cls._isinstance:
cls._isinstance = super().__new__(cls)
return cls._isinstance
print(id(A))
print(id(A))
print(id(A))
print(id(A))
"""
输出结果:
19888488
19888488
19888488
19888488
"""
5、__slots __属性 我们都知道python是一门动态语言,可以在程序运行的过程中添加属性。如果我们想要限制实例的属性该怎么办?例如,只允许对Person实例添加name和age属性。 为了达到限制的⽬的,Python允许在定义class的时候,定义⼀个特殊的 __slots__变量,来限制该class实例能添加的属性:
class Person(object):
__slots__ = ("name", "age")
P = Person()
P.name = "⽼王"
P.age = 20
P.score = 100
"""
输出结果:
Traceback (most recent call last):
File "<input>", line 6, in <module>
AttributeError: 'Person' object has no attribute 'score'
"""
注意:使⽤__slots__要注意,__slots__定义的属性仅对当前类实例起作⽤,对 继承的⼦类是不起作⽤的。