有没有一种方法可以自动绑定到__init__
方法的参数?
例如,假设我们有:
class Person:
def __init__(self, name, age, address):
self.name = name
self.age = age
self.address = address
...
是否可以创建一个lazy_init
装饰器,允许以这种方式来实现?
class Person:
@lazy_init
def __init__(self, name, age, address):
...
是否存在类似的技术?还是有一个很好的理由不去尝试?
6条答案
按热度按时间rqqzpn5f1#
供将来遇到此问题的所有其他人参考(Python 3.7或更高版本):有一个dataclass装饰器可以做到这一点。
示例
aoyhnmkz2#
这绝对是可能的,这里有一个有点天真的实现:
一旦你开始有一些除了属性之外的Map到属性的东西,你就会遇到麻烦。您至少需要某种方式来指定哪些参数要初始化为属性…到时候只会变得更麻烦
vql8enpb3#
你可以像这样使用Python 3.7的数据类:
或者你可以像这样使用
fastcore
库中的store_attr()
方法:这两种方法都产生等价的init方法:
egdjgwm84#
http://code.activestate.com/recipes/551763-automatic-attribute-assignment/就是你要找的
参见What is the best way to do automatic attribute assignment in Python, and is it a good idea?
2nc8po8w5#
下面是最简单的形式:
考虑制作一个类装饰器来覆盖
__str__
。aor9mmx16#
initify.py由我创建:)它做的正是你所期望的。
或使用默认值:
甚至排除继承:
https://github.com/prankymat/initify.py