【发布时间】:2014-10-01 18:31:39
【问题描述】:
目前我有类似的东西
if name and password:
user = User(name, password)
...do stuff
我想将其重构为:
user = User(name, password)
if user:
...do stuff
我创建了一个User() 类:
class User():
def __init__(self, name, password):
if name and password:
self.name, self.password = name, password
但在这种情况下,即使 name 或 password 是 None,user 仍会被实例化(为空但仍然存在,因此 if user: 测试为真)。
我如何不根据特定参数实例化一个对象?
【问题讨论】:
-
在提出这个问题 5 年后,我最终避免了这种模式,并在 init 中使用了经典的 self.exists = False。如果您的实例正常,则将其设置为 True。条件不再是 if user: 但是 if user.exists: 这仍然很容易理解,但是对象构造器模式要简单得多(没有 new 方法)