如何使类以下列方式返回对象:
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__
等方法,但没有一种产生所需的行为。
答案 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)