[python] 파이썬에서 __init__의 값을 반환하는 방법은 무엇입니까?

__init__함수 가있는 클래스가 있습니다.

객체가 생성 될 때이 함수에서 정수 값을 반환하려면 어떻게해야합니까?

__init__명령 줄 구문 분석을 수행 하는 프로그램을 작성했으며 몇 가지 값을 설정해야합니다. 전역 변수에 설정하고 다른 멤버 함수에서 사용해도 괜찮습니까? 그렇다면 어떻게해야합니까? 지금까지 클래스 외부에서 변수를 선언했습니다. 하나의 기능을 설정해도 다른 기능에는 반영되지 않습니까?



답변

__init__없음을 반환하려면이 필요합니다. 다른 것을 반환 할 수 없습니다 (또는 적어도 반환해서는 안됩니다).

인스턴스 변수 (또는 함수)를 반환하려는 모든 것을 만들어보십시오.

>>> class Foo:
...     def __init__(self):
...         return 42
...
>>> foo = Foo()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() should return None


답변

왜 그렇게 하시겠습니까?

클래스가 호출 될 때 다른 객체를 반환하려면 다음 __new__()메서드 를 사용하십시오 .

class MyClass(object):
    def __init__(self):
        print "never called in this case"
    def __new__(cls):
        return 42

obj = MyClass()
print obj


답변

문서에서__init__ :

생성자에 대한 특별한 제약으로 값을 반환 할 수 없습니다. 이렇게하면 런타임에 TypeError가 발생합니다.

증거로이 코드는 다음과 같습니다.

class Foo(object):
    def __init__(self):
        return 2

f = Foo()

이 오류를 제공합니다.

Traceback (most recent call last):
  File "test_init.py", line 5, in <module>
    f = Foo()
TypeError: __init__() should return None, not 'int'


답변

문제의 샘플 사용법은 다음과 같을 수 있습니다.

class SampleObject(object):

    def __new__(cls, item):
        if cls.IsValid(item):
            return super(SampleObject, cls).__new__(cls)
        else:
            return None

    def __init__(self, item):
        self.InitData(item) #large amount of data and very complex calculations

...

ValidObjects = []
for i in data:
    item = SampleObject(i)
    if item:             # in case the i data is valid for the sample object
        ValidObjects.append(item)

평판이 부족해서 댓글을 쓸 수 없어 미쳤어 요! weronika에 댓글로 게시 할 수 있으면 좋겠습니다.


답변

__init__return 문이없는 경우에 기본적으로 다른 방법과 기능 반환 없음 같은 방법은, 당신은이 중 하나처럼 쓸 수 있습니다 :

class Foo:
    def __init__(self):
        self.value=42

class Bar:
    def __init__(self):
        self.value=42
        return None

그러나 물론를 추가 return None해도 아무것도 사지 않습니다.

당신이 무엇을 추구하는지 잘 모르겠지만 다음 중 하나에 관심이있을 수 있습니다.

class Foo:
    def __init__(self):
        self.value=42
    def __str__(self):
        return str(self.value)

f=Foo()
print f.value
print f

인쇄물:

42
42


답변

__init__아무것도 반환하지 않으며 항상 반환해야합니다 None.


답변

클래스 변수로 설정하고 기본 프로그램에서 읽을 수 있습니다.

class Foo:
    def __init__(self):
        #Do your stuff here
        self.returncode = 42
bar = Foo()
baz = bar.returncode