假设我有一个函数和类这样的类,
>>> def something():
... x = 5
... y = 6
... return x, y
>>> class SomethingElse():
... def __init__(self, x, y):
... self.x = x
... self.y = y
... print(x+y)
...
我想将我的函数作为属性返回给我的类,这可能吗?因为当我调用我的函数时,我只将它作为1个属性。
>>> S = SomethingElse(5, 6)
11
>>> S1 = SomethingElse(something)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __init__() missing 1 required positional argument: 'y'
我真正想要的是,
>>> S1 = SomethingElse(something)
11
答案 0 :(得分:3)
你可以使用splat(或“unpacking”)运算符*
,就像这样
>>> SomethingElse(*something())
11
这可以在Python教程的Unpacking Argument Lists中看到,通常称为参数解包。
答案 1 :(得分:-1)
您有几个选择。
此使y
成为可选参数。使用SomethingElse(something())
或SomethingElse(5, 6)
进行调用。
class SomethingElse():
def __init__(self, x, y=None):
if y is None:
x, y = *x
self.x = x
self.y = y
print(x + y)
此定义了一个帮助函数make_kind
,它完全返回SomethingElse
的新实例。您可以使用SomethingElse.make_kind()
来调用它;不需要self
参数。
class SomethingElse():
def __init__(self, x, y):
self.x = x
self.y = y
print(x + y)
@staticmethod
def make_kind():
x = 5
y = 6
return SomethingElse.__init__(x, y)
在官方Python 3.5文档上了解有关@staticmethod
的更多信息。