Я превращаю часть кода Python в OO-код.Я определяю класс и конструктор с двумя аргументами.
class myclass:
MAX=5000
FTOL = 10**(-10)
TINY = 10**(-10)
def __init__(self, initPt_,fun_):
self.initPt = initPt_
self.fun = fun_
С этим кодом я ожидаю, что initPt и fun будут участниками класса.Я выполняю код и записываю этот экземпляр в оболочку:
x=myclass([1,1],Optim.fun1)
, где fun1 - функция, определенная в модуле Optim, которую я точно импортировал.
Я добавил в myclass функцию:
def build(self):
self.initPt=self.initPt.append(self.fun(self.initPt))
s=[self.initPt]
for k in range(len(self.initPt)):
temp=[x for x in self.initPt]
temp[k]=self.initPt[k]+1
s.append(temp)
return s
Я вызываю метод build на экземпляре x, который я только что создал.Появляется эта ошибка:
for k in range(len(self.initPt)):
TypeError: object of type 'NoneType' has no len()
и действительно, если я добавлю эту тестовую строку в коде:
print str(type(self.iniPt))
shell означает, что типом является NoneType, хотя я создал экземпляр x с self.initPt =[1,1].
Более того, если я напишу x.initPt в оболочке, результат будет точным: [1,1,0.2] (после вызова сборки метода третье значение добавляется в начальный список [1,1]).
Я не понимаю, почему он не разрешает тип динамически.Это не объектное программирование.Что мне делать?
Спасибо и всего наилучшего.