일부 Python 코드를 OO 코드로 변환하고 있습니다. 클래스와 두 개의 인수 생성자를 정의합니다.Python OO - 클래스 멤버가 NoneType을 가짐
class myclass:
MAX=5000
FTOL = 10**(-10)
TINY = 10**(-10)
def __init__(self, initPt_,fun_):
self.initPt = initPt_
self.fun = fun_
이 코드를 사용하면 initPt와 fun가 클래스 멤버가 될 것으로 예상됩니다. I 코드를 실행하고 쉘이 instanciation 해주기 I 정확하게 가져온 것이
x=myclass([1,1],Optim.fun1)
fun1 모듈 Optim을 정의하는 함수이다. 내가 방금 만든 x를 인스턴스에 구축 메서드를 호출
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
:
나는 함수를 MyClass에 추가되었습니다. 이 오류가 나타납니다for k in range(len(self.initPt)):
TypeError: object of type 'NoneType' has no len()
과 실제로 내가 코드에서이 테스트 라인을 추가하는 경우 :
print str(type(self.iniPt))
쉘은 내가 self.initPt = [1,1와 X를 통해 인스턴스 althought, 그 유형은 NoneType을 나타냅니다 ].
또한 x.initPt를 쉘에 쓰면 결과가 정확합니다. [1,1,0.2] (메소드 빌드 호출 후 초기 목록 [1,1]에 세 번째 값이 추가됨).
왜 유형을 동적으로 해석하지 않는지 이해할 수 없습니다. 그렇다면 객체 프로그래밍이 아닙니다. 어떻게해야합니까?
감사합니다.
관용적 인 개선의 단지 작은 비트 :'temp = self.initPt [:]; 임시 [k] + = 1 '. 그리고 힌트 : [PEP 8] (http://www.python.org/dev/peps/pep-0008/). –
좋은 참조, 감사합니다. – octoback