在python模型中可以有两个或多个__init__吗



我想在python类中创建两个__init__,它们将实例化该类的不同元素。

之所以提出这个问题,是因为我试图对数据库中的记录进行部分更新,并且我使用的是SQLAlchemy ORM,它将python类及其属性分别映射到数据库表和列。但是,我要更新user表中的user_score列,然后在监听PATCH请求的update函数中创建user对象的实例,但它没有更新。所以,我想我可以创建另一个init,它只负责处理user_score属性。

class User(db.Model):
__tablename__='users'
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)
score = Column(Integer, nullable=False)
def __init__(self, name, score):
self.name = name
self.score = score
def __init__(self, score):
self.score = score
def insert(self):
db.session.add(self)
db.session.commit()

def update(self):
db.session.commit()
def format(self):
return {
'id': self.id,
'name': self.name,
'score': self.score
}

只有一个__init__是可能的,但你可以让它做不同的事情,比如:

def __init__(self, optA: bool = False, optB: int = 0):
self.optA = optA
self.optB = optB
if self.optA:
# do something different if optA is true (i.e., not the default)
if self.optB != 0:
# do something different if optB is not the default of 0
etc...

因此,通过为可选参数提供合理的默认值,您可以拥有一个__init__,其行为根据提供的参数以及如果提供的参数的值而不同。互联网上有很多关于这方面的好参考:(

因此,如果您只是在不带参数的情况下实例化对象,则会获得如图所示的默认值,但如果您确实提供了它们,则您提供的值会覆盖默认值并触发内部if语句中的行为。

最新更新