And*_*ima 10 python initialization decorator
有没有办法自动绑定到方法的self
(某些)参数__init__
?
我的意思是:
class Person:
@lazy_init
def __init__(self, name, age, address):
...
Run Code Online (Sandbox Code Playgroud)
... 代替:
class Person:
def __init__(self, name, age, address):
self.name = name
self.age = age
self.address = address
...
Run Code Online (Sandbox Code Playgroud)
我想知道在这种情况下人们是否已经使用了类似的东西.或者有什么理由我不应该首先这样做?
供将来遇到此问题的所有其他人参考(Python 3.7 或更高版本):有一个数据类装饰器可以做到这一点。
from dataclasses import dataclass
@dataclass
class Person:
name
age
address
# other methods...
Run Code Online (Sandbox Code Playgroud)
这绝对是可能的,这是一个有点天真的实现:
def lazy_init(init):
import inspect
arg_names = inspect.getargspec(init)[0]
def new_init(self, *args):
for name, value in zip(arg_names[1:], args):
setattr(self, name, value)
init(self, *args)
return new_init
class Person:
@lazy_init
def __init__(self, name, age):
pass
p = Person("Derp", 13)
print p.name, p.age
Run Code Online (Sandbox Code Playgroud)
一旦你开始拥有除了映射到属性的属性之外的东西,你就会遇到麻烦.你至少需要一些方法来指定哪些args初始化为属性......在这一点上它会变得比它的价值更麻烦.
归档时间: |
|
查看次数: |
8531 次 |
最近记录: |