【发布时间】:2015-10-17 18:16:59
【问题描述】:
我想将我第一次启动课程与其他所有时间区分开来。我创建了一个实例属性并将其值设置为 True。我该怎么做才能让所有后续实例将该属性值设为 False?
class Cool(Dude):
def __init__(self):
self.coolnesscheck = True
【问题讨论】:
标签: python python-3.x instance mutation
我想将我第一次启动课程与其他所有时间区分开来。我创建了一个实例属性并将其值设置为 True。我该怎么做才能让所有后续实例将该属性值设为 False?
class Cool(Dude):
def __init__(self):
self.coolnesscheck = True
【问题讨论】:
标签: python python-3.x instance mutation
您可以使用类属性来指示第一个对象是否已创建。示例 -
class Cool:
__firstinit = True
def __init__(self):
self.coolnesscheck = Cool.__firstinit
Cool.__firstinit = False
我在名字前面加上__来引入Name Mangling,这样在类外就不容易访问该属性了。
【讨论】:
if..else 是不必要的 - 它与 if x == 1: return 1; elif x == 2: return 2... 的反模式匹配。
__init__)中将Cool 替换为self.__class__,则可以在不更改代码的情况下随意重命名类。
使用类属性,并在实例化该类的对象时将其设置为False:
>>> class Cool:
... coolnesscheck = True
... def __init__(self):
... self.coolnesscheck = Cool.coolnesscheck
... Cool.coolnesscheck = False
...
>>> Cool.coolnesscheck
True
>>> a = Cool()
>>> Cool.coolnesscheck
False
>>> a.coolnesscheck
True
>>> b = Cool()
>>> Cool.coolnesscheck
False
>>> b.coolnesscheck
False
【讨论】: