2014-11-22 2 views
0

저는 파이썬에서 OOP에 비교적 익숙합니다. (저는 주로 Tkinter와 함께 사용하고 있습니다), 저를 괴롭히는 한가지 문제점이 있습니다.파이썬에서 클래스 함수의 결과 리턴하기

예를 들어
class test(): 
    def __init__(self): 
     self.var1="Hello World" 
     self.check() 
    def check(self): 
     if self.var1=="Hello World": 
      return True 

if test()==True: 
    print("These are the same") 

, 나는, 일반 영어, '두 배의 값을 반환'할 수있는 방법이 바로 (클래스 자체의 결과를 고려 반환되는 그 '사실'하지 있도록 함수), 따라서 'if'문을 실행하고 "This are the same"을 인쇄합니까?

미리 감사드립니다.

+0

여기서 whats input()? –

+0

@ Gohn67 - 생성자에서 값을 반환 할 수 없습니다 (암시 적으로 반환되는'None'을 제외하고). – iCodez

+0

@iCodez Doh! 좋은 지적. 나는 더 많은 관심을 기울여야했다. 댓글이 삭제되었습니다. 감사. – Gohn67

답변

2

개체는 진리 값으로 간주됩니다 (몇 가지 다른 규칙 중 하나). 해당 클래스는 __bool__이라는 메서드를 정의합니다. 따라서 check 메서드의 이름을 __bool__으로 변경하고 예제가 약간 변경되면 작동합니다. 확인하려면 if test():을 확인하십시오. 이 값을 두 번 반환하지 않는다는 것에주의하십시오. 그러나 방금 생성 한 객체의 'truthiness'를 확인합니다. 동일한 파이썬 규칙에 따르면, 예를 들어 if mylist:은 mylist에 요소가 있는지 확인합니다.

좋은 측정을 위해 검사가 실패 할 때 해당 메서드가 False를 반환하도록 할 수 있습니다. 현재 None을 반환합니다. 이 작업을 수행하고자 할 수있다,

def __bool__(self): 
    return self.var1 == "Hello world" 
0

아니요, 방법이 없습니다. self.checkTrue과 같은 변수를 설정 한 다음 test.checkTrue을 확인하여 사실인지 확인해야합니다. 예 :

class test(): 
    def __init__(self): 
     self.var1="Hello World" 
     self.check() 
    def check(self): 
     if self.var1=="Hello World": 
      self.checkTest = True 
test = test() 
if test.checkTest: 
    print("These are the same") 
input() 

또 다른 문제는 그 객체를 새로운 변수로 만든 적이 없다는 것입니다.

1

을 다른 방법 :이 작업을 수행하는 가장 좋은 방법은 약간을 다시 작성하는 것입니다

if test().check(): 
    print("These are the same") 

test() 클래스 test의 인스턴스를 생성하고, .check() 반환하거나 True 또는 방법 check()False.


참고 : 타이틀 케이스를 사용하여 클래스의 이름을 지정하는 것이 일반적인 관례이며, 명시 적으로 object를 서브 클래 싱하는 것이 가장 좋습니다. 그래서 :

class test(): 

은 다음과 같아야합니다

class Test(object): 
0

당신이 클래스를 호출 할 때 항상 해당 클래스의 인스턴스를 반환 때문에, 그것은 생성자입니다. 그럼에도 불구하고 클래스에 원하는대로 반환하는 다른 메서드를 제공하고 생성자 대신 해당 메서드를 사용할 수 있습니다.

class Foo: 
    @classmethod 
    def create(cls, arg): 
     self = cls() 
     return [self, arg] 
foo = Foo.create("bar")