Staatilised ja klassimeetodid Pythonis¶
Sissejuhatus¶
Python võimaldab teil defineerida staatilisi ja klassimeetodeid, mis on spetsiaalsed funktsioonid, mis kuuluvad klassi, mitte selle eksemplarile (objektile). Staatilised meetodid on seotud kogu klassiga ja neid saab kutsuda ilma objekti loomata, samal ajal kui klassimeetodid on seotud klassi tervikuna.
Staatilised meetodid¶
Staatilised meetodid on meetodid, mis kuuluvad klassile, mitte selle eksemplarile. Neid saab kutsuda klassinimi.meetod() kaudu. Staatilisi meetodeid kasutatakse sageli, kui meetod ei sõltu klassi eksemplari olekust, kuid on loogiliselt seotud klassiga.
Klassimeetodid¶
Klassimeetodid on meetodid, mis kuuluvad klassile, mitte eksemplarile, kuid saavad ligi klassi enda atribuutidele. Neid saab kutsuda klassinimi.meetod() kaudu. Klassimeetodeid kasutatakse sageli, kui on vaja luua meetodeid, mis mõjutavad klassi atribuute, kuid ei sõltu konkreetsest eksemplarist.
Koodinäited¶
Staatilised meetodid:
class MathUtility:
@staticmethod
def add(x, y):
return x + y
result = MathUtility.add(3, 5)
print(result)
# Väljund:
# 8
Klassimeetodid:
class Dog:
total_dogs = 0
def __init(self, name):
self.name = name
Dog.total_dogs += 1
@classmethod
def show_total_dogs(cls):
return cls.total_dogs
dog1 = Dog("Rex")
dog2 = Dog("Buddy")
total = Dog.show_total_dogs()
print(f"Kokku koeri: {total}")
# Väljund:
# Kokku koeri: 2
Rohkem staatilistest meetoditest¶
Staatilised meetodid on meetodid, mis kuuluvad klassile, mitte selle eksemplarile, ja neid saab kutsuda ilma objekti loomata. Need meetodid on kasulikud olukordades, kus meetod ei sõltu klassi eksemplari olekust ega kasuta selle atribuute.
Staatilisi meetodeid saab määratleda klassi sees kasutades @staticmethod dekoratsiooni. Selle dekoratsiooni abil märgistatakse meetod staatiliseks ja see muutub seotuks kogu klassiga, mitte ühegi konkreetse eksemplariga.
Staatilised meetodid aitavad parandada koodi loetavust ja struktuuri, eriti juhul, kui klassis on palju meetodeid, mis ei sõltu eksemplari olekust, kuid on siiski seotud klassi endaga.
Staatilised meetodid iseseisvate funktsioonide jaoks¶
Staatilised meetodid sobivad ideaalselt iseseisvate funktsioonide loomiseks klassis. Staatilised meetodid ei saa kasutada klassi ega eksemplari olekut, mis muudab nad iseseisvateks ja selgelt näitab, et nad ei muuda klassi ega eksemplari omadusi. Seda piirangut järgib Pythoni interpretaator ja see on väärtuslik viis arendaja kavatsuse edastamiseks.
Staatiliste meetodite ja klassimeetodite abil saate luua selgeid piire oma klassiarhitektuuris, mis muudab selle mõistmise ja hooldamise lihtsamaks. Lisaks on staatiliste meetodite kasutamine testikoodi kirjutamisel kasulik, kuna neid saab iseseisvalt testida, ilma et peaksite täielikku klassi eksemplari looma.
Pärilikkus¶
Staatilised meetodid käituvad nagu tavalised funktsioonid pärinedes. Nad ei tea midagi objekti eksemplaarist ega klassist, milles nad on.
Klassimeetodid parameetrid muutuvad kui kutsuda alamklassist. Klassifunktsiooniga kaasa tulev cls muutuja viitab alamklassile, mitte ülemklassile.
Mõlemad meetodid lubavad meetodite varjamist, ehk saad defineerida sama nimega meetodi, mis saab midagi muud teha. See erineb ülekirjutamisest kuna sisemiselt on ikka olemas ülemklassi meetod, aga see on peidetud alamklassi meetodi nime taga. (Selleks, et kutsuda ülemklassi meetodit saab kasutada super() meetodit)
class MyClass:
def __init__(self):
pass
@classmethod
def class_method(cls):
print("Superclass method")
@staticmethod
def static_method():
print("Superclass Static")
class MySubClass(MyClass):
def __init__(self):
MyClass.__init__(self)
@classmethod
def class_method(cls):
print("Subclass method")
@staticmethod
def static_method():
print("Subclass Static")
def super_class_access(self):
super().class_method()
super().static_method()
base = MyClass()
base.class_method() # Superclass method
base.static_method() # Superclass Static
sub = MySubClass()
sub.class_method() # Subclass method
sub.static_method() # Subclass Static
sub.super_class_access() # Superclass method
# Superclass Static
Kokkuvõte¶
Eksemplarimeetodid vajavad klassi eksemplari ja pääsevad sellele ligi kasutades self.
Klassimeetodid ei vaja klassi eksemplari. Neil on juurdepääs klassile endale läbi cls.
Staatilistel meetoditel pole juurdepääsu ei cls ega self. Need käituvad nagu tavalised funktsioonid, kuid kuuluvad klassi nimeruumi.
Staatilised ja klassimeetodid aitavad edastada ja (teatud määral) rakendada arendaja kavatsust klassi kujunduse osas, mis võib kaasa tuua hoolduseelised.
Lisaks infot¶
Lisateabe saamiseks staatiliste ja klassimeetodite kohta Pythonis vaadake järgmist linki: lisaks infot.