programing

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

minimums 2023. 7. 17. 20:50
반응형

파이썬에서 __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

반응형