无法将变量添加到List的实例

时间:2018-07-26 17:57:04

标签: python-3.x keras

我想在Conv2D图层的权重上添加一个名为foo的变量,以跟踪某些簿记。

这是我的尝试:

kernels = model.get_layer(name='conv2d_1').get_weights()
kernels.foobar = 4

请注意,kernels的类型为list。 但是,先前的代码会产生以下错误:

AttributeError: 'list' object has no attribute 'foobar'

有什么主意吗?

1 个答案:

答案 0 :(得分:0)

您无法按自己的方式使用kernels.__setattr__('foobar', 4) / setattr(kernels, 'foobar', 4),因此无法像使用自定义类那样设置任意属性。

也许在这种情况下,您在list上做了一个非常基本的子类:

class Kernels(list):
    def __setattr__(self, attr, x):
        # Make sure you aren't overriding some method of lists,
        # such as `.append()`
        if attr in self.__dir__():
            raise ValueError('%s is already a method.')
        super().__setattr__(attr, x)

>>> k = Kernels([1, 2, 3])
>>> k.foobar = 4  
>>> k
[1, 2, 3]
>>> k.foobar
4