kzen.dev
  • Kérdések
  • Címkék
  • Felhasználók
Értesítések
Jutalmak
Regisztráció
Miután regisztrált, értesítést kap a kérdéseire adott válaszokról és hozzászólásokról.
Bejelentkezés
Ha már rendelkezik fiókkal, jelentkezzen be az új értesítések ellenőrzéséhez.
A hozzáadott kérdésekért, válaszokért és megjegyzésekért jutalmak járnak majd.
További
Forrás
Szerkesztés
Andrew Walker
Andrew Walker
Question

Lehetségesek-e statikus osztályváltozók Pythonban?

Lehetséges, hogy a Pythonban statikus osztályváltozók vagy metódusok legyenek? Milyen szintaxis szükséges ehhez?

1797 2008-09-16T01:46:36+00:00 3
 Georgy
Georgy
Szerkesztett kérdés 22. június 2019 в 12:09
Programozás
oop
class
python
static
class-variables
Popular videos
Static Variable or Class Variable - Python OOPs 04
Static Variable or Class Variable - Python OOPs 04
3 éve
Python super function 🦸
Python super function 🦸
2 éve
Python class variables 🚗
Python class variables 🚗
2 éve
PYTHON : Are static class variables possible in Python?
PYTHON : Are static class variables possible in Python?
1 éve
Python OOP Tutorial 3: classmethods and staticmethods
Python OOP Tutorial 3: classmethods and staticmethods
7 éve
AKI HISZEN ÉS MEGKERESZTELKEDIK, IDVEZÜL...
AKI HISZEN ÉS MEGKERESZTELKEDIK, IDVEZÜL...
1 éve
Python OOP Tutorial 2: Class Variables
Python OOP Tutorial 2: Class Variables
7 éve
Python programozás kezdőknek - 27 - osztályok és objektumok
Python programozás kezdőknek - 27 - osztályok és objektumok
4 éve
Osztályok - Még nem volt elég módosítószó
Osztályok - Még nem volt elég módosítószó
2 éve
Python programozás kezdőknek - 30 - öröklődés
Python programozás kezdőknek - 30 - öröklődés
4 éve
Objektumorientált programozás (OOP). 1. rész: Osztályok és objektumok
Objektumorientált programozás (OOP). 1. rész: Osztályok és objektumok
2 éve
Python Érettségi 14. Python Class setter method / getter method
Python Érettségi 14. Python Class setter method / getter method
1 éve
03. Galaxy - Ágyu osztály létrehozása - Python OOP
03. Galaxy - Ágyu osztály létrehozása - Python OOP
3 éve
Python zip – Python tutorial magyar felirattal – CodeBerry Programozóiskola
Python zip – Python tutorial magyar felirattal – CodeBerry Programozóiskola
1 éve
Python Érettségi 11. Python Class method, __init__
Python Érettségi 11. Python Class method, __init__
2 éve
Python programozás kezdőknek - 01 - bevezető
Python programozás kezdőknek - 01 - bevezető
4 éve
Informatika érettségi - programozás: 2020. október * Python
Informatika érettségi - programozás: 2020. október * Python
2 éve
Objektumorientált programozás (OOP). 2. rész: Osztályok jellemzői
Objektumorientált programozás (OOP). 2. rész: Osztályok jellemzői
2 éve
stathelp 06 - SPSS grafikonok 31 - Oszlopdiagram középértékekhez 1/2
stathelp 06 - SPSS grafikonok 31 - Oszlopdiagram középértékekhez 1/2
3 éve
Érettségi-orientált Python-programozás: 3. rész - "Lerántjuk a leplet az 'objektumokról' "
Érettségi-orientált Python-programozás: 3. rész - "Lerántjuk a leplet az 'objektumokról' "
8 éve
Statisztika gyorstalpaló #3 - Hipotézisvizsgálat / Statisztikai próba hibái
Statisztika gyorstalpaló #3 - Hipotézisvizsgálat / Statisztikai próba hibái
3 éve
« Előző
Következő »
Ez a kérdés 1 válasz angol nyelvű, elolvasásához jelentkezzen be a fiókjába.
Solution / Answer
Blair Conrad
Blair Conrad
16. szeptember 2008 в 1:51
2008-09-16T01:51:06+00:00
További
Forrás
Szerkesztés
#8460420

Az osztálydefinícióban, de nem egy metódusban deklarált változók osztály- vagy statikus változók:

>>> class MyClass:
...     i = 3
...
>>> MyClass.i
3 

Amint arra @millerdev rámutat, ez egy osztályszintű i változót hoz létre, de ez különbözik bármely példányszintű i változótól, így lehet, hogy a

>>> m = MyClass()
>>> m.i = 4
>>> MyClass.i, m.i
>>> (3, 4)

Ez különbözik a C++-tól és a Javától, de nem annyira különbözik a C#-tól, ahol egy statikus taghoz nem lehet hozzáférni egy példányra való hivatkozással.

Lásd mit mond a Python oktatókönyv az osztályok és osztályobjektumok témájában.

@Steve Johnson már válaszolt a statikus metódusokkal kapcsolatban, amelyek szintén a "Beépített függvények" a Python Library Reference-ban dokumentálva vannak.

class C:
    @staticmethod
    def f(arg1, arg2, ...): ...

@beidy a classmethod-ot ajánlja a staticmethod helyett, mivel a metódus ekkor az osztály típusát kapja első argumentumként, de én még egy kicsit homályosan látom ennek a megközelítésnek az előnyeit a staticmethodhoz képest. Ha te is, akkor valószínűleg nem számít.

 Arne
Arne
Szerkesztett válasz 16. július 2019 в 6:06
Built-in Functions — Python 3.10.7 documentation
docs.python.org
Built-in Functions — Python 3.10.7 documentation
docs.python.org
9. Classes — Python 3.10.7 documentation
docs.python.org
1777
0
Artificial intelligence to parse product page
productapi.dev
 emb
emb
16. szeptember 2008 в 2:02
2008-09-16T02:02:45+00:00
További
Forrás
Szerkesztés
#8460421

Én személy szerint mindig classmethod-t használnék, amikor statikus metódusra van szükségem. Főleg azért, mert az osztályt kapom argumentumként.

class myObj(object):
   def myMethod(cls)
     ...
   myMethod = classmethod(myMethod) 

vagy egy dekorátort használok.

class myObj(object):
   @classmethod
   def myMethod(cls)

Statikus tulajdonságok esetén.. Itt az ideje, hogy utánanézz néhány python definíciónak... a változó mindig változhat. Két típusuk van, a mutable és az immutable... Továbbá vannak osztály attribútumok és példány attribútumok... Semmi sem hasonlít a statikus attribútumokhoz a java & c++ értelmében.

Miért használjunk statikus metódust pythoni értelemben, ha nincs semmilyen kapcsolata az osztállyal! A helyedben én vagy classmethod-t használnék, vagy az osztálytól független metódust definiálnám.

 emb
emb
Szerkesztett válasz 16. szeptember 2008 в 11:29
15
0
Artificial intelligence to parse product page
productapi.dev
 willurd
willurd
16. szeptember 2008 в 2:05
2008-09-16T02:05:49+00:00
További
Forrás
Szerkesztés
#8460422

A statikus módszereket pythonban classmethod-nak hívják. Nézzük meg a következő kódot

class MyClass:

    def myInstanceMethod(self):
        print 'output from an instance method'

    @classmethod
    def myStaticMethod(cls):
        print 'output from a static method'

>>> MyClass.myInstanceMethod()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unbound method myInstanceMethod() must be called [...]

>>> MyClass.myStaticMethod()
output from a static method

Vegyük észre, hogy amikor meghívjuk a myInstanceMethod metódust, hibát kapunk. Ennek az az oka, hogy a metódust az osztály egy példányán kell meghívni. A myStaticMethod metódus a decorator @classmethod segítségével classmethodként van beállítva.

Csak a vicc kedvéért meghívhatjuk az myInstanceMethod metódust az osztályon az osztály egy példányának átadásával, így:

>>> MyClass.myInstanceMethod(MyClass())
egy példánymódszer kimenete
Andrii Abramov
Andrii Abramov
Szerkesztett válasz 12. július 2017 в 10:23
13
0
Kérdés hozzáadása
Kategóriák
Minden
Technológia
Kultúra / Szabadidő
Élet / Művészetek
Tudomány
Szakmai
Üzleti
Felhasználók
Minden
Új
Népszerű
1
Inessa bu
Regisztrált 1 hónapja
2
Denis Babushkin
Regisztrált 1 hónapja
3
asakuno asakuno
Regisztrált 1 hónapja
4
aldo salerno
Regisztrált 1 hónapja
5
Анна Батицкая
Regisztrált 2 hónapja
Artificial intelligence to parse product page
productapi.dev
BG
CS
DA
DE
EL
ES
FI
FR
HU
ID
IT
JA
KO
LV
NL
NO
PL
PT
RO
RU
TR
UK
ZH
© kzen.dev 2023
Forrás
stackoverflow.com
engedéllyel cc by-sa 3.0 attribútummal