【发布时间】:2020-03-31 13:59:15
【问题描述】:
我有 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):
...
我有一个第三类必须使用这两个类。
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?它不需要处理任何参数,还需要处理其他类期望的参数。
【问题讨论】:
-
将
C的接口定义为接受A对象、B对象不是更有意义吗?这解决了歧义。如果A和B这两个类的参数名相似怎么办? -
你会一直使用
A和B的默认值吗?或者您有时会想要不同于默认值的值吗? -
后续问题:如果您的课程具有以下签名怎么办:
class A: def __init__(self, a, /, b, *args, c, **kwargs): ...和class B: def __init__(self, x, /, y, *args, z, **kwargs): ...。如果C接受A、B对象:class C: def __init__(self, a: A, b: B): ...,这一切都没有问题。 -
你能提供一些明确的限制吗?否则,这个问题可能会变得任意复杂。可以有重叠的参数吗?可以有
*args或**kwargs,或仅位置参数吗?C可以成为另一个使用此方案的类的一部分吗?C是否总是只包含两个类,或者可能更多?
标签: python python-3.x