python OOP attributeError:对象没有属性

python OOP attributeError:对象没有属性,python,oop,attributeerror,Python,Oop,Attributeerror,我有一个关于物体属性的问题。正如您所看到的,mnist_网络对象具有一些我必须在某些方法中使用的属性(属性:train_img、train_res、test_img、test_res)。调用函数test\u predict(self)时,我得到以下错误:AttributeError:'mnist\u network'对象没有属性'test\u img'。你能解释一下吗?我对Python中的OOP非常陌生。 我使用Spyder并尝试使用“帮助”找出属性的错误,但我只得到“没有可用的文档”。所以这没

我有一个关于物体属性的问题。正如您所看到的,mnist_网络对象具有一些我必须在某些方法中使用的属性(属性:train_img、train_res、test_img、test_res)。调用函数test\u predict(self)时,我得到以下错误:
AttributeError:'mnist\u network'对象没有属性'test\u img'
。你能解释一下吗?我对Python中的OOP非常陌生。 我使用Spyder并尝试使用“帮助”找出属性的错误,但我只得到“没有可用的文档”。所以这没有什么帮助

这是我的代码(它应该预测手写数字):


因为您已将
self
(它是对该对象当前实例的引用)指定给
model
,该模型是
Sequential
的实例,它实际上没有属性
test\u img
。例如,如果您选择在何处执行操作:

class mnist_network(Sequential):
    def __init__(self):
         self = "foo bar"
然后,当您执行
instance=mnist_network()
时,您将在内存中保留一个位置的引用,用于实例中显示“foo bar”的字符串,而不是
类mnist_network
的实例。一般来说,你永远不会做这样的事情

self = some_stuff
任何地方。这毫无意义。我对tensorflow&keras不太熟悉,但我想你可能想做的是:

class mnist_network(Sequential):
    def __init__(self):
         # do stuff....
或许你真正想做的是:

class mnist_network:
    def __init__(self):
         # do stuff
         self.model = Sequential()
前一种方法是,如果您试图使用方法,类的属性是连续的,但希望在它们之上进行扩展,这在OOP中称为继承。作为一个Sequantial对象实例,您可以获得所有的好处,但是您可以在类mnist_网络中自由地向它添加新的方法和属性


如果需要在类中访问一个顺序对象并要求他执行操作,则可以选择后者。这就是所谓的合成。

self=model
对我来说似乎很奇怪。我不认为,你能给一个类分配一个Keras序列。你应该使用类似于
self.model=model
的方法来检查一下关于课堂上的自我分配:你为什么要做
self=model
???当然,这会造成很多问题。。。
class mnist_network:
    def __init__(self):
         # do stuff
         self.model = Sequential()