如何在类初始化后引用类时返回一个对象?

时间:2016-06-30 16:09:00

标签: python python-3.x oop

如何使类以下列方式返回对象:

sscanf()

每当引用import numpy as np a = np.array([(1,2),(3,4)]) 时,它都会返回

a

但是当我创建一个简单的类时:

array([[1, 2],
       [3, 4]])

然后运行class Example: def __init__(self, data): self.nparray = np.array(data) ,然后引用b = Example([(1,2),(3,4)])我得到:b。要返回值,我需要运行<__main__.Example at 0x7f17381099e8>

如何让课程b.nparray返回

Example

何时引用array([[1, 2], [3, 4]])

我尝试使用b__new____repr__等方法,但没有一种产生所需的行为。

3 个答案:

答案 0 :(得分:2)

使用Python的“魔术方法”,就像你已经看到的__init__一样,我们可以让类在某些事情发生时执行代码。其中一个是__call__,它在类像函数一样被调用时执行。

知道这一点,你可以使用这段代码:

import numpy as np

class Example:
    def __init__(self, data):
        self.nparray = np.array(data)

    def __call__(self):
        # This function is called when an instance of Example is called
        return self.nparray

结果:

>>> b = Example([[1, 2], [3, 4]])
>>> b()
array([[1, 2],
       [3, 4]])

有关魔术方法的更多信息,请参阅this useful article

答案 1 :(得分:2)

您应该以下列方式使用__repr__

class Example:
    def __init__(self, data):
            self.nparray = np.array(data)
    def __repr__(self):
            return repr(self.nparray)

这将返回self.nparray对象中的表示:

>>> c = Example([(1, 2), (3, 4)])
>>> c
array([[1, 2],
       [3, 4]])

当然,在交互式会话中使用,您只需输入名称并按Enter键即可使用print(c)进行打印。如果您只需限制print次调用,则可以为相关对象定义__str__

答案 2 :(得分:0)

您无法从类 init 函数返回任何数据。你尝试过类似的东西吗?

class Example(object):
    nparray = None
    def __init__(self, data):
        self.nparray = np.array(data)
        return

    def getArray(self):
        return(self.nparray)