gpt4 book ai didi

python - 自动初始化实例变量?

转载 作者:IT老高 更新时间:2023-10-28 21:32:56 25 4
gpt4 key购买 nike

我有一个如下所示的 python 类:

class Process:
def __init__(self, PID, PPID, cmd, FDs, reachable, user):

接着是:

        self.PID=PID
self.PPID=PPID
self.cmd=cmd
...

有没有办法自动初始化这些实例变量,比如 C++ 的初始化列表?它将节省大量冗余代码。

最佳答案

你可以使用装饰器:

from functools import wraps
import inspect

def initializer(func):
"""
Automatically assigns the parameters.

>>> class process:
... @initializer
... def __init__(self, cmd, reachable=False, user='root'):
... pass
>>> p = process('halt', True)
>>> p.cmd, p.reachable, p.user
('halt', True, 'root')
"""
names, varargs, keywords, defaults = inspect.getargspec(func)

@wraps(func)
def wrapper(self, *args, **kargs):
for name, arg in list(zip(names[1:], args)) + list(kargs.items()):
setattr(self, name, arg)

for name, default in zip(reversed(names), reversed(defaults)):
if not hasattr(self, name):
setattr(self, name, default)

func(self, *args, **kargs)

return wrapper

用它来装饰 __init__ 方法:

class process:
@initializer
def __init__(self, PID, PPID, cmd, FDs, reachable, user):
pass

输出:

>>> c = process(1, 2, 3, 4, 5, 6)
>>> c.PID
1
>>> dir(c)
['FDs', 'PID', 'PPID', '__doc__', '__init__', '__module__', 'cmd', 'reachable', 'user'

关于python - 自动初始化实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1389180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com