python - 包装一个已经存在的类

标签 python

我遇到了一个错误,其中循环数据的迭代器在循环回开头之前在集合末尾给出了比预期更短的余数。我需要所有迭代的大小完全相同,因此我希望它删除剩余的部分。不幸的是,迭代器被称为另一个对象的参数,所以我无法控制何时 __next__()叫做。我想到的解决方案是制作一个继承自迭代器的自定义类,并且仅重新定义 __next__() .

我尝试按如下方式执行此操作:

class CleanIterator(NumpyArrayIterator):

    def __init__(self, _super):
        super=_super

    def __next__(self, *args, **kwargs):
        return self.next(*args, **kwargs)

    def next(self, *args, **kwargs):
        while True:
            data= super.next(*args, **kwargs)

            # reject short data snippets
            if data[0].shape[0] == self.batch_size:
                return data

# .flow return a NumpyArrayIterator
data_generator= ImageDataGenerator().flow(
        valid_data, valid_labels,
        batch_size= 100)
data_generator= CleanIterator(data_generator)

这设法从多个继承级别继承函数,但似乎只从 NumpyArrayIterator 继承变量。

结果我收到这样的错误:

venv/lib/python3.6/site-packages/keras_preprocessing/image/iterator.py", line 68, in __len__
    return (self.n + self.batch_size - 1) // self.batch_size  # round up
AttributeError: 'CleanIterator' object has no attribute 'n'

其中 NumpyArrayIterator 继承自 Iterator。迭代器有变量 self.n和功能__len__() .

我尝试寻找正确的语法,但我能找到的每个示例都是从头开始构建父类,而不是从现有实例开始。

所以我想问题是:如何从父类的旧实例创建子类的新实例?

最佳答案

我不确定这是否是你想要的。我对你在问什么感到很困惑,这能回答你的问题吗?

class first:
    def test_function(self):
        print('it works')

instance = first()

class secondary(instance.__class__):
    """This class adds functionality to the already existent instance of the First class"""
    def __init__(self):
        super().__init__()

    def added_function(self):
        pass

正如您所见,通过使用实例的 __class__ 属性,我们可以访问它的类。

关于python - 包装一个已经存在的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57343832/

相关文章:

Python github 使用用户名和密码 pull

python - 找到无穷大值并替换为 numpy 数组中每个向量的最大值

python - 棉花糖循环导入

Python:按条件和进行分组

python - 在进行多处理时使用产量获取结果时遇到问题

python - 为什么我导入 numpy 后多处理只使用一个核心?

python - 使用 anaconda python3 安装 opencv 3.1?

python - 是否有 wxPython( Phoenix ) 的 wx.EVT_CHAR 或 event.GetKeyCode() 等价物?

python - Python 中的高通滤波器哪里出了问题?

python - Poisson 的 E-test 在 Python 中的实现