La création d'une classe statique avec pas de cas
Tous les tutoriels que j'voir en ligne montrent comment créer des classes avec __init__
les méthodes constructeur de sorte qu'on peut déclarer des objets de ce type, ou des instances de cette classe.
Comment puis-je créer une classe (statique en Java) afin que je puisse accéder à toutes les méthodes et attributs de la classe sans avoir à créer de nouvelles instances/objets?
Par exemple:
class World:
allElems = []
def addElem(x):
allElems.append(x)
World.addElem(6)
print(World.allElems)
MODIFIER
class World(object):
allAirports = []
@staticmethod
def initialize():
f = open(os.path.expanduser("~/Desktop/1000airports.csv"))
file_reader = csv.reader(f)
for col in file_reader:
allAirports.append(Airport(col[0],col[2],col[3]))
d'erreur: nom de "allAirports" n'est pas défini
- Pourquoi voulez-vous qu'une classe statique? Que voulez-vous atteindre? - voir aussi: stackoverflow.com/q/10388127/562769
- essayez -
World.allAirports.append(....
. - Ne pas le faire. Je ne sais pas ce que Java a fait à votre pauvre âme, mais cela ne peut que mal se terminer.
allAirports
n'est pas seulement une transgression de la PEP 8, mais - *gasp!* - une mutable mondiale. Tout ce que vous voulez réaliser, vous êtes en essayant d'atteindre le mauvais sens. - Aussi, l'utilisation
with
pour les fichiers. - Valide les cas d'utilisation pour des cours réguliers, pour les classes statiques et nu fonctions.
Vous devez vous connecter pour publier un commentaire.
La Pythonic façon à créer une classe statique est tout simplement de déclarer les méthodes en dehors de la classe (Java utilise des classes à la fois pour les objets et pour le regroupement des fonctions connexes, mais les modules Python sont suffisantes pour le regroupement des fonctions connexes qui ne nécessitent aucune instance de l'objet). Toutefois, si vous insistez sur la réalisation d'une méthode au niveau de la classe qui ne nécessite pas une instance (plutôt que de simplement en faire un libre-debout fonction de votre module), vous pouvez le faire en utilisant le "@staticmethod" décorateur.
Qui est, le Pythonic serait:
Mais si vous voulez reprendre la structure de Java, vous pouvez le faire:
Vous pouvez aussi le faire avec
@classmethod
si vous connaissez la classe (ce qui peut être pratique si vous souhaitez autoriser la méthode statique d'hériter d'une classe héritant de cette classe):from module import field
ils sont coincés avec la valeur au moment de l'importation.Il y a deux façons de le faire (Python 2.6+):
méthode statique
module
votre fichier de module, appelé klass.py
votre code:
self
à la ligne 12. il devrait êtreself.allAirports.append(Airport(col[0],col[2],col[3]))
Vous pouvez utiliser un
classmethod
oustaticmethod
classmethod
a l'avantage de travailler avec des sous-classes, si tu voulais vraiment que de la fonctionnalité.module est certainement mieux que.
Semble que vous avez besoin classmethod: