2014-11-01 4 views
0

이전에 자바에서 객체 지향 코딩을 했었지만 파이썬에서 처음 시도했습니다. 저는 지속적으로 선형 회귀가 맞는 것처럼 보이는 대학의 광학 수업을 가지고 있습니다. 그래서 나는 간단한 피사체를 만들어서 번거롭지 않게 선형 피팅을 만들 수있게되었습니다. 그것은 내가 파이썬 객체에 대해 위로 올라가고 있지 않다는 것을 말했고, 지금까지는 조금 어렵다는 것을 증명했다.첫 번째 파이썬 객체

내가 할 수있는 한 가지를 제외하고는이 시점에서 모든 것이 잘 작동하는 것처럼 보이지만, 파이썬 객체에 대한 나의 벤처에 약간의 피드백을 원했다. 한 가지 어려운 점은 클래스 변수에 새로운 값을 할당하는 것입니다. 또 다른 방법은 자기가 사용하는 매개 변수가 무엇인지 이해하지 못한다는 것입니다 (Java에서 'this'와 거의 같은 것처럼 보입니다). 내가 함께 가서 여기

__author__ = 'tristan' 


import numpy as np 
import matplotlib.pyplot as plt 
from scipy.optimize import curve_fit 


class LinearFit: 

__xdata = None 
__ydata = None 
__xerror = None 
__yerror = None 

def __init__(self, xdata, ydata, xerror = None, yerror = None): 
    LinearFit.__xdata = xdata 
    LinearFit.__ydata = ydata 
    LinearFit.__xerror = xerror 
    LinearFit.__yerror = yerror 

def printxdata(self): 
    print LinearFit.__xdata 

테스트 프로그램은 다음과 같습니다 :

__author__ = 'tristan' 

from LinearFit import LinearFit 

x = [1,2,3,4,5] 
y = [6, 7, 8, 9, 10] 
z = LinearFit(x, y) 
print z.printxdata() 

내 출력은 다음과 같습니다이 지금 내 주요 문제

[1,2,3,4,5] 
None 

입니다

어쨌든 여기까지 나의 클래스입니다 내가 왜 앞에서 언급 한 문제 없음을 인쇄합니까? 도움 주셔서 감사합니다.

답변

2

메서드에서 명시 적으로 아무 것도 반환하지 않으므로 None을 반환합니다. 그런 다음 인쇄합니다. 값을 반환하려는 경우 대신 return LinearFit.__xdata[:]을 사용해야합니다. 그리고 처음 두 배 밑줄을 다시 사용해야합니다.

+0

아마 대신 인스턴스의 클래스에 모든 것을 저장하는 재고해야한다. – BrenBarn

+0

어떻게하면 인쇄하고 아무 것도 반환하지 않는 메서드를 만들 수 있습니다. Java 인 경우 메서드에서 void keyterm을 사용할 수 있으며 아무 것도 반환하지 않습니다. 비슷한 것이 있거나 항상 돌아올 것입니다. 또한 이중 대시를 앞에 두지 않아야하는 이유는 무엇입니까? 가능한 한 비공개 및 클라이언트 친화적으로 유지하고 싶습니다. – Tristan

+0

당신은 ** "아무것도"반환 할 수 없습니다 **. 그러나 인쇄를 피할 수 있습니다. 그리고 초기 이중 밑줄에 대해서는 사적인 것이 없습니다. –

1

"반송"과 "인쇄"는 다른 것입니다. 그것은 누군가에게 당신에게 무언가를 주거나 당신에게 뭔가를 보여달라고 요청하는 것과 같습니다.

# first executes printxdata() 
# then returns the result 
print z.printxdata() 

# a longer and easier to understand way: 
result = z.printxdata() 
print result 

결과는 없습니다. printxdata()가 아무 것도 반환하지 않으므로 결과가 화면에 인쇄됩니다.

// in Java 
public void printxdata() { 
    // it just PRINTS 
    System.out.println(LinearFit.__xdata) 
    // NO return statement 
} 

불만을 표시하기 위해 방금 해 두었습니다.

편집 : printxdata()가 이미 뭔가를 인쇄 때문에, 다시 인쇄를 사용할 필요가 없습니다 :

# replace this 
print z.printxdata() 

# with this 
z.printxdata() 
관련 문제