W Pythonie chcę, aby klasa miała pewne „stałe” (praktycznie zmienne), które będą wspólne dla wszystkich podklas. Czy można to zrobić za pomocą przyjaznej składni? Obecnie używam:
class Animal:
SIZES=["Huge","Big","Medium","Small"]
class Horse(Animal):
def printSize(self):
print(Animal.SIZES[1])
i zastanawiam się, czy istnieje lepszy sposób na zrobienie tego lub sposób na zrobienie tego bez konieczności pisania „Animal”. przed rozmiarami. Dzięki! edycja: zapomniałem wspomnieć, że koń dziedziczy po zwierzęciu.
SIZES
nigdy się nie zmieni, zdecydowanie użyj krotki zamiast listy. Tak("Huge","Big","Medium","Small")
Odpowiedzi:
Ponieważ
Horse
jest to podklasaAnimal
, możesz po prostu zmienićz
Mimo to musisz pamiętać, że
SIZES[1]
oznacza to „duży”, więc prawdopodobnie mógłbyś ulepszyć swój kod, wykonując coś takiego:Alternatywnie, można utworzyć klasy pośrednich:
HugeAnimal
,BigAnimal
, i tak dalej. Byłoby to szczególnie pomocne, gdyby każda klasa zwierząt miała inną logikę.źródło
Możesz dostać się
SIZES
za pomocąself.SIZES
(w metodzie instancji) lubcls.SIZES
(w metodzie klasowej).W każdym razie musisz wyraźnie określić, gdzie znaleźć
SIZES
. Alternatywą jest umieszczenieSIZES
modułu zawierającego klasy, ale wtedy musisz zdefiniować wszystkie klasy w jednym module.źródło
źródło
Rozwijając odpowiedź betabandido, możesz napisać funkcję, która wstrzyknie atrybuty jako stałe do modułu:
źródło
print SIZE_BIG
poza klasą będzie to samo? Czy będzie można go edytowaćAnimal.SIZE_HUGE = 'Small'
?