Jul*_*nec 2 python optimization sqlalchemy python-2.7
我最近开始使用**kwargsin __init__()来初始化一个对象,因为我在添加另一个属性时不必对该函数进行任何更新.我只是将它们作为参数传递,循环完成工作.
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)
Run Code Online (Sandbox Code Playgroud)
但是,根据您的经验,这样做是否存在安全问题?与明确定义将要初始化的代码相比,我们是否会遇到不必要的副作用?
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")
Run Code Online (Sandbox Code Playgroud)
这是否属于"不良副作用"?
class Foo(object):
def __init__(self, name, **kw):
self.name = name
for k, v in kw.items():
setattr(self, k, v)
f = Foo("Bob", __dict__={"aaa":1, "bbb":2, "name":"HEHEHE"})
f.name
>>> 'HEHEHE'
Run Code Online (Sandbox Code Playgroud)
或者更有趣:
class Bar(object):
pass
f = Foo("Bob", __dict__={"aaa":1, "bbb":2, "name":"HEHEHE"}, __class__=Bar)
type(f)
>>> <class '__main__.Bar'>
Run Code Online (Sandbox Code Playgroud)
现在只有受信任的代码才能实现你的课程,这里没有真正的安全问题 - 所有这些都可以在初始化程序之外完成.但显而易见会使代码更具可读性,并且有助于在这里和那里捕获一些错字.
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |