【发布时间】:2012-02-21 20:59:30
【问题描述】:
我正在将一些 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 成为班级成员。我执行代码并在 shell 中编写此实例:
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
我在刚刚创建的实例 x 上调用方法 build。出现这个错误:
for k in range(len(self.initPt)):
TypeError: object of type 'NoneType' has no len()
事实上,如果我在代码中添加这个测试行:
print str(type(self.iniPt))
shell 表示类型是 NoneType,尽管我用 self.initPt = [1,1] 实例化了 x。
此外,如果我在 shell 中编写 x.initPt,结果是准确的:[1,1,0.2](调用方法 build 后,将第三个值添加到初始列表 [1,1])。
我不明白为什么它不能动态解析类型。这不是对象编程。我该怎么办?
感谢和问候。
【问题讨论】:
-
只是一点点惯用改进:
temp = self.initPt[:]; temp[k] += 1。还有一个提示:PEP 8.
标签: python oop class attributes instance