首页 文章

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

提问于
浏览
0

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

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____getitem__ 之类的方法,但是没有产生所需的行为 .

3 回答

  • 0

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

    class Example(object):
        nparray = None
        def __init__(self, data):
            self.nparray = np.array(data)
            return
    
        def getArray(self):
            return(self.nparray)
    
  • 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]])
    

    当然,在交互式会话期间使用 and ,您只需输入名称并按Enter键,如果使用 print(c) 打印它 . 如果您需要限制仅针对 print 调用,则为相关对象定义 __str__ .

  • 2

    使用Python的"magic methods",就像你已经看过的 __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 .

相关问题