我最近开始在__init__()
中使用**kwargs
来初始化一个对象,因为我在添加另一个属性时不必对函数进行任何更新。我只是把它们作为参数传递,循环就完成了工作。你知道吗
class Customer(Base):
"""Model that defines a customer entity"""
__tablename__ = "customers"
date_created = Column(DateTime)
date_modified = Column(DateTime)
def __init__(self, **kwargs):
for key, value in kwargs.items():
setattr(self, key, value)
但是,根据你的经验,这样做有安全隐患吗?与下面显式定义将初始化什么的代码相比,我们是否会遇到不必要的副作用?你知道吗
class Customer(Base):
"""Model that defines a customer entity"""
__tablename__ = "customers"
date_created = Column(DateTime)
date_modified = Column(DateTime)
def __init__(self, attrs):
self.date_created = attrs.get("date_created")
self.date_modified = attrs.get("date_modified")
这是否符合“不必要的副作用”?你知道吗
或者为了更有趣:
现在只要只有可信代码实例化类,这里就没有真正的安全问题——所有这些实际上都可以在初始化器之外完成。但是显式的代码更具可读性,并且可以帮助在这里和那里捕捉到一些拼写错误。你知道吗
受Bruno的启发,您甚至可以覆盖
__getattribute__
和__setattr__
,有效地使类变得无用有了这个:
你甚至无法修复它:
相关问题 更多 >
编程相关推荐