gpt4 book ai didi

python - 使用其他类的默认初始化值

转载 作者:行者123 更新时间:2023-12-04 13:37:25 24 4
gpt4 key购买 nike

我有 2 个具有某些功能的类:

class A:
def __init__(self, one=1, two=2):
self.one = one
self.two = two

def do_smt(self):
...

class B:
def __init__(self, value="test"):
self.value = value

def do_smt(self):
...

我有第三个类必须使用 2 个类正在这样做。
class C:
def __init__(self, one=1, two=2, value="test"):
self.A = A(one, two)
self.B = B(value)

def do_smt(self):
...

现在我这样做: new_class = C()
但是如果默认值是 class A or B 呢?更改,那么我还需要在 class C 中更改它.有没有办法写 class C以某种方式知道哪些参数是默认参数?它不需要处理任何参数,但也需要处理其他类所期望的参数。

最佳答案

您可以使用 inspect.signature获取__init__的参数类的每个“基”类的方法 C ,然后让 C.__init__接受变量关键字参数,以便它可以遍历“基”类并传递给 __init__每个方法只是它需要什么以及给定的关键字参数有什么。使用 itertools.islice忽略第一个参数,它总是 self :

import inspect
from itertools import islice

class C:
bases = A, B
params = {}
for cls in bases:
params[cls] = inspect.signature(cls.__init__).parameters

def __init__(self, **kwargs):
for cls in self.bases:
setattr(self, cls.__name__, cls(**{key: kwargs[key] for key in
islice(self.params[cls], 1, None) if key in kwargs}))

以便:
c = C(one=3,value='hi')
print(c.A.one)
print(c.A.two)
print(c.B.value)

输出:
3
2
hi

关于python - 使用其他类的默认初始化值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60952382/

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