Възможни ли са статични променливи на класове в Python?
Възможно ли е в Python да има статични променливи или методи на класа? Какъв синтаксис е необходим за това?
1797
3
Възможно ли е в Python да има статични променливи или методи на класа? Какъв синтаксис е необходим за това?
Променливите, декларирани в дефиницията на класа, но не и в метод, са променливи на класа или статични променливи:
Както посочва @millerdev, това създава променлива
i
на ниво клас, но тя се различава от всяка променливаi
на ниво инстанция, така че бихте могли да иматеТова е различно от C++ и Java, но не е толкова различно от C#, където статичен член не може да бъде достъпен чрез препратка към инстанция.
Вижте какво се казва в учебника по Python по темата за класовете и обектите от класове.
@Стив Джонсън вече е отговорил относно статичните методи, документирани също в "Вградени функции" в справочника на библиотеката Python.
@beidy препоръчва classmethods пред staticmethod, тъй като тогава методът получава типа на класа като първи аргумент, но аз все още съм малко размит относно предимствата на този подход пред staticmethod. Ако и вие сте така, тогава вероятно това няма значение.
Лично аз бих използвал classmethod винаги, когато ми е необходим статичен метод. Главно защото получавам класа като аргумент.
или използвайте декоратор
За статични свойства.. Време е да разгледате някоя дефиниция на Python.. променливата винаги може да се промени. Има два вида променливи - променливи и непроменливи.. Освен това има атрибути на класове и атрибути на инстанции. Нищо подобно на статичните атрибути в смисъла на java & c++
Защо да използваме статичен метод в питонския смисъл, ако той няма никаква връзка с класа! На ваше място бих използвал classmethod или бих дефинирал метода независимо от класа.
Статичните методи в питон се наричат classmethods. Разгледайте следния код
Забележете, че когато извикаме метода myInstanceMethod, получаваме грешка. Това е така, защото се изисква методът да бъде извикан върху инстанция на този клас. Методът myStaticMethod е зададен като метод на класа с помощта на декоратора @classmethod.
Само за радост можем да извикаме myInstanceMethod на класа, като подадем инстанция на класа, както следва: