繁体   English   中英

Python创建类的多个实例

[英]Python Creating Multiple Instances of a Class

我正在尝试创建一个NumPy对象数组,如下所示......

import numpy as np

class Pixel:
    def __init__(self):
        self.r = 0
        self.g = 0
        self.b = 0

class Image:
    def __init__(self):
        self.pixels = np.full((4, 4), Pixel())

if __name__ == '__main__':
    image = Image()
    print(image.pixels)

输出是......

[[<__main__.Pixel object at 0x02A92F70>
  <__main__.Pixel object at 0x02A92F70>]
 [<__main__.Pixel object at 0x02A92F70>
  <__main__.Pixel object at 0x02A92F70>]]

它似乎创建了同一个对象的数组。 我的问题是如何使用每个像素的不同对象初始化数组?

亲切的问候

您可以使用np.array函数并从标准python列表初始化它,如下所示:

class Image:
def __init__(self):
    self.pixels = np.array([Pixel() for i in range(2 * 2)]).reshape([2, 2])

结果如下:

[[<__main__.Pixel object at 0x00000218B89F6438>
  <__main__.Pixel object at 0x00000218B89F64A8>]
 [<__main__.Pixel object at 0x00000218B89F4D68>
  <__main__.Pixel object at 0x00000218B89F43C8>]]

如你所见,它们不是同一个对象。

请注意,它不会影响您的时间复杂度,因为在任何情况下您都需要初始化O(n)对象。

感谢所有的回复,最有帮助。 我发现最适合我的特定情况的方法是使用numpy.empty()方法创建一个正确大小的数组,然后遍历用新对象填充数组的元素。 它可能不是最有效的,但它对我来说最具可读性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM