Vairāk
Vai Python ir iespējami statiskie klases mainīgie?
Vai Python ir iespējams izmantot statiskus klases mainīgos vai metodes? Kāda sintakse ir nepieciešama, lai to izdarītu?
1797
3
Mainīgie, kas deklarēti klases definīcijā, bet ne metodē, ir klases vai statiskie mainīgie:
Kā norāda @millerdev, tas rada klases līmeņa
i
mainīgo, bet tas atšķiras no jebkura gadījuma līmeņai
mainīgā, tāpēc varētu būtTas atšķiras no C++ un Java, bet ne tik ļoti no C#, kur statiskajam loceklim nevar piekļūt, izmantojot atsauci uz instance.
Skatiet Python pamācību par klasēm un klases objektiem.
@Steve Johnson jau ir atbildējis par statiskajām metodēm, kas arī dokumentētas sadaļā "Iebūvētās funkcijas" Python bibliotēkas atsaucē.
@beidy iesaka classmethods, nevis staticmethod, jo tad metode kā pirmo argumentu saņem klases tipu, bet es joprojām esmu mazliet neskaidrs par šīs pieejas priekšrocībām salīdzinājumā ar staticmethod. Ja arī jums ir, tad, iespējams, tam nav nozīmes.
Es personīgi izmantoju klases metodi, kad man bija nepieciešama statiska metode. Galvenokārt tāpēc, ka kā argumentu es saņemu klasi.
vai izmantot dekoratoru
Statiskām īpašībām.. Tās laiks jums apskatīt kādu python definīciju.. mainīgais vienmēr var mainīties. Ir divu veidu mainīgie un nemainīgie mainīgie.. Ir arī klases atribūti un instances atribūti... Nekas līdzīgs statiskajiem atribūtiem java un c++ izpratnē.
Kāpēc lietot statisko metodi pitoniskā nozīmē, ja tai nav nekādas saistības ar klasi! Ja es būtu jūsu vietā, es vai nu izmantotu klases metodi, vai definētu metodi neatkarīgi no klases.
Statiskās metodes pitonā sauc par classmethods. Aplūkojiet šādu kodu
Ievērojiet, ka, izsaucot metodi myInstanceMethod, mēs saņemam kļūdu. Tas ir tāpēc, ka šī metode ir jāizsauc šīs klases instancē. Metode myStaticMethod ir iestatīta kā klases metode, izmantojot dekoratoru @classmethod.
Tikai tā, ka mēs varētu izsaukt myInstanceMethod klasei, nododot klases gadījumu, piemēram, šādi: