파이썬에서 __init__의 값을 반환하는 방법은 무엇입니까?
나는 수업이 있습니다.__init__
기능.
개체를 만들 때 이 함수에서 정수 값을 반환하려면 어떻게 해야 합니까?
나는 프로그램을 썼고, 그곳에서.__init__
명령행 구문 분석을 수행합니까? 값을 설정해야 합니다.글로벌 변수로 설정하고 다른 멤버 기능에 사용해도 괜찮습니까?그렇다면 어떻게 해야 합니까?지금까지 저는 수업 외 변수를 선언했습니다.하나의 기능을 설정하는 것은 다른 기능에 반영되지 않습니까?
클래스가 호출될 때 다른 개체를 반환하려면 다음을 사용합니다.__new__()
방법:
class MyClass:
def __init__(self):
print("never called in this case")
def __new__(cls):
return 42
obj = MyClass()
print(obj)
# Output: 42
__init__
없음을 반환하려면 를 입력해야 합니다.다른 것은 반품할 수 없습니다.
인스턴스(instance) 변수(또는 함수)를 반환할 항목을 만드십시오.
>>> 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
의 설명서에서:
생성자에 대한 특수 제약 조건으로 값을 반환할 수 없습니다. 이렇게 하면 런타임에 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)
그__init__
메서드는 다른 메서드 및 함수와 마찬가지로 반환 문이 없는 경우 기본적으로 없음을 반환하므로 다음 중 하나와 같이 쓸 수 있습니다.
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
값을 반환할 수 없습니다.하지만 우리는 새로운 것을 사용하여 가치를 반환할 수 있습니다.
class Car:
def __new__(cls, speed, unit):
return (f"{speed} with unit {unit}")
car = Car(42, "km")
print(car)
init() 완벽하게 해결된 값을 반환하지 않습니다.
class Solve:
def __init__(self,w,d):
self.value=w
self.unit=d
def __str__(self):
return str("my speed is "+str(self.value)+" "+str(self.unit))
ob=Solve(21,'kmh')
print (ob)
출력: 제 속도는 21kmh입니다.
추가하고 싶었을 뿐입니다. 강의를 반환할 수 있습니다.__init__
@property
def failureException(self):
class MyCustomException(AssertionError):
def __init__(self_, *args, **kwargs):
*** Your code here ***
return super().__init__(*args, **kwargs)
MyCustomException.__name__ = AssertionError.__name__
return MyCustomException
위의 방법은 테스트에서 예외가 발생했을 때 특정 작업을 구현하는 데 도움이 됩니다.
일부 문자열 데이터를 재귀 데이터 구조로 구문 분석하려고 할 때 이 경우를 만났고 전달할 카운터가 있었습니다.
Python은 에서 아무것도 반환할 수 없습니다.__init__
하지만 당신은 공장 기능, 수업 방법, 또는Parser
클래스는 데이터를 데이터 개체로 구문 분석하는 코드 구조 및 구문 분석의 복잡성에 따라 달라집니다.
글로벌 변수는 구문 분석 논리를 위반하여 다른 곳에서 변경될 수 있으므로 좋은 솔루션이 아닙니다.
기능 예:
class MyClass():
def __init__(self, a, b, c):
# only assignments here
self.a = a
self.b = b
self.c = c
# return None
def parse(data):
# parsing here
a = ...
b = ...
c = ...
# status, counter, etc.
i = ...
# create an object
my_obj = MyClass(a, b, c)
# return both
return my_obj, i
# get data and parse
data = ...
my_obj, i = parse(data)
클래스 방법 예:
class MyClass():
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
@classmethod
def parse(cls, data):
a = ...
b = ...
c = ...
i = ...
obj = cls(a, b, c)
return obj, i
data = ...
my_obj, i = MyClass.parse(data)
여기서 솔루션 예, python에서 init 메서드에서 반환하려고 하면 클래스의 생성자이므로 클래스 범위에 대한 값만 할당할 수 있고 특정 값은 반환할 수 없습니다.값을 반환하지만 메서드를 생성하지 않으려면 str 메서드를 사용할 수 있습니다.
def __init__(self,a):
self.value=a
def __str__(self):
return str("all my return values are possible here")`
만약 당신이 객체 인스턴스에 대해 더 이상 신경쓰지 않는다면...당신은 그냥 그것을 교체할 수 있습니다!
class MuaHaHa():
def __init__(self, ret):
self=ret
print MuaHaHa('foo')=='foo'
언급URL : https://stackoverflow.com/questions/2491819/how-to-return-a-value-from-init-in-python
'programing' 카테고리의 다른 글
참 조건(x = x ?: 1)에 대한 값을 할당하지 않고 3진수 연산자를 사용하는 이유는 무엇입니까? (0) | 2023.07.17 |
---|---|
공백 없이 텍스트를 단어 목록으로 분할하는 방법 (0) | 2023.07.17 |
Chrome에서 Selenium WebDriver Python 바인딩 실행 (0) | 2023.07.17 |
Oracle을 사용하여 Oracle에 연결합니다.관리되는 데이터 액세스 (0) | 2023.07.17 |
스프링 부츠 플라이웨이예외:데이터베이스에 연결할 수 없습니다.URL, 사용자 및 암호 구성 (0) | 2023.07.17 |