Mam klasę z __init__
funkcją.
Jak mogę zwrócić wartość całkowitą z tej funkcji podczas tworzenia obiektu?
Napisałem program, w którym __init__
analizuje się wiersz poleceń i potrzebuję ustawić jakąś wartość. Czy można ustawić to w zmiennej globalnej i używać w innych funkcjach składowych? Jeśli tak, jak to zrobić? Do tej pory zadeklarowałem zmienną poza klasą. a ustawienie jednej funkcji nie odzwierciedla się w innej funkcji?
__init__
; możemy Ci pomóc, jeśli opiszesz, co naprawdę próbujesz osiągnąć.Odpowiedzi:
__init__
jest wymagany do zwrócenia Brak. Nie możesz (a przynajmniej nie powinieneś) zwrócić czegoś innego.Spróbuj zrobić wszystko, co chcesz, aby zwrócić zmienną instancji (lub funkcję).
źródło
new
tu jest ? Czy jestnew
ukryty w Pythonie? Założyłem, że semantyka Pythona różni się od języka Java i innych języków, które używają tego słowa.super().__init__
klasy pochodnej bez konieczności przekazywania ich przez zmienną instancji.Dlaczego chcesz to zrobić?
Jeśli chcesz zwrócić jakiś inny obiekt po wywołaniu klasy, użyj
__new__()
metody:źródło
__init__
, zdajesz sobie sprawę, że naprawdę, aby zapewnić pożądaną elastyczność, potrzebujesz fabryki klas, która zwraca wystąpienia wyspecjalizowanych podklas. Jednak użytkownicy Twojej biblioteki już używają istniejącego interfejsu API. Aby to zachować, nadpisujesz__new__
zwracanie wystąpień wyspecjalizowanych podklas.datetime
modułu z Biblioteki standardowej. Używa__new__
dokładnie w ten sposób.Z dokumentacji
__init__
:Na dowód ten kod:
Daje ten błąd:
źródło
Przykładowe wykorzystanie przedmiotowej sprawy może wyglądać następująco:
Nie mam wystarczającej reputacji, więc nie mogę napisać komentarza, to szaleństwo! Chciałbym móc to opublikować jako komentarz do weroniki
źródło
self
nie jest zdefiniowane w__new__(cls, Item)
__init__
Sposób, jak inne metody i funkcje zwróci None domyślnie w przypadku braku instrukcji return, więc można napisać, że jak jeden z nich:Ale oczywiście dodanie
return None
nic nie kupuje.Nie jestem pewien, czego szukasz, ale może Cię zainteresować jeden z nich:
wydruki:
źródło
f = Foo().value
__init__
.__init__
nic nie zwraca i zawsze powinien wrócićNone
.źródło
Możesz po prostu ustawić ją na zmienną klasy i odczytać ją z głównego programu:
źródło
Chciałem tylko dodać, możesz zwrócić klasy w
__init__
Powyższa metoda pomaga zaimplementować w teście określoną akcję na wyjątku
źródło
super().__init__
powracaNone
, więc wracaszNone
, co jest w porządku, ale zbędne.init () nie zwraca żadnej wartości rozwiązanej idealnie
wyjście: moja prędkość to 21 kmh
źródło
Cóż, jeśli nie dbasz już o instancję obiektu ... możesz ją po prostu zastąpić!
źródło
self
w tym konstruktorze.