从函数返回的值作为类属性

时间:2017-01-20 22:34:13

标签: python function python-3.x parameter-passing

假设我有一个函数和类这样的类,

>>> 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

2 个答案:

答案 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的更多信息。