Python中几个常见的魔法方法(2)

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__定义的属性仅对当前类实例起作⽤,对 继承的⼦类是不起作⽤的。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/a42db2b183d2b9d9dfb9c65b65e8b8e1.html