__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