Python de passage de variable entre les classes
Je suis en train de créer un personnage de l'assistant de génération d'un jeu. Dans une classe-je calculer les attributs du personnage. Dans une autre classe, je suis de l'affichage à l'utilisateur qui les spécialités sont disponibles sur la base des attributs du personnage. Cependant, je ne me souviens pas comment passer des variables entre les différentes classes.
Voici un exemple de ce que j'ai:
class BasicInfoPage(wx.wizard.WizardPageSimple):
def __init__(self, parent, title):
wiz.WizardPageSimple.__init__(self, parent)
self.next = self.prev = None
self.sizer = makePageTitle(self, title)
<---snip--->
self.intelligence = self.genAttribs()
class MOS(wx.wizard.WizardPageSimple):
def __init__(self, parent, title):
wiz.WizardPageSimple.__init__(self, parent)
self.next = self.prev = None
self.sizer = makePageTitle(self, title)
def eligibleMOS(self, event):
if self.intelligence >= 12:
self.MOS_list.append("Analyst")
Le problème est que je ne peux pas comprendre comment utiliser, "l'intelligence" de la variable dans le BasicInfoPage classe à la MOS classe. J'ai essayé plusieurs choses différentes un peu partout sur Internet mais rien ne semble fonctionner. Ce qui me manque?
Modifier j'ai réalisé après que j'ai posté ce que je n'ai pas l'expliquer. Je suis en train de créer une version informatique du Crépuscule 2000 RPG depuis les années 1980.
Je suis en utilisant wxPython pour créer un assistant de la classe parente de mes classes est l'Assistant de wxPython. Cet assistant va à pied à un utilisateur par le biais de la création d'un personnage, de sorte que la page Informations de Base (classe BasicInfoPage) permet à l'utilisateur de donner le nom du personnage et "roll" pour les attributs du personnage. C'est là que le "soi".l'intelligence" vient de.
Je suis en train d'utiliser les attributs créés pour une page plus loin dans l'assistant, où l'utilisateur choisit la spécialité du personnage. Les spécialités qui sont disponibles dépendent des attributs du caractère a, par exemple, si l'intelligence est suffisamment élevée, le personnage peut être un processeur Intel Anaylst.
Cela fait plusieurs années que je l'ai programmé, en particulier avec la programmation orientée objet idées. C'est pourquoi je suis confus sur la façon de créer ce qui est essentiellement une variable globale avec des classes et des méthodes.
OriginalL'auteur crystalattice | 2008-09-22
Vous devez vous connecter pour publier un commentaire.
Vous pouvez avoir la "Classe" et "Instance" confondre. Il n'est pas clair à partir de votre exemple, donc je vais supposer que vous utilisez beaucoup de définitions de classe et n'ont pas d'objet approprié des instances de ces classes.
Classes n'ont pas vraiment utilisable valeurs d'attribut. Une classe est simplement un ensemble commun de définitions d'une collection d'objets. Vous devriez penser à des classes de définitions, pas les choses.
Des Instances de classes, des "objets", sont des choses qui ont de réelles valeurs d'attribut et d'exécuter des fonctions de méthode.
Vous n'avez pas à passer des variables entre classes. Vous de passer des variables entre instances. En pratique, seules les variables d'instance de la matière. [Oui, il y a des variables de classe, mais ils sont assez spécialisés et souvent source de confusion chose, vaut mieux l'éviter.]
Lorsque vous créez un objet (une instance d'une classe)
Puis
b.intelligence
est la valeur de l'intelligence pour l'b
instance deBasicInfoPage
.Vraiment un point commun, c'est
Maintenant, au sein de MOS méthodes, vous pouvez dire
self.basicInfo.intelligence
parce que MOS a un objet qui est un BasicInfoPage disponibles.Lorsque vous générez MOS, de vous fournir avec l'instance de BasicInfoPage qu'il est censé utiliser.
Maintenant, l'objet
m
pouvez examinersomeBasicInfoPage.intelligence
OriginalL'auteur S.Lott
Chaque page d'un Assistant -- par elle-même, ne devrait pas vraiment être le récipient de l'information que vous recueillez.
Lire sur le Modèle-Vue-Contrôle modèle de conception. Vos pages ont le Visualiser et de Contrôler les éléments de la conception. Ils ne sont pas un modèle de données, cependant.
Vous serez plus heureux si vous avez un objet qui est "construit" par les pages. Chaque page de définir certains attributs du modèle sous-jacent de l'objet. Ensuite, les pages sont indépendants les uns des autres, depuis les pages de tous les obtenir et définir les valeurs de ce modèle sous-jacent de l'objet.
Puisque vous êtes la création d'un personnage, vous auriez un peu de classe comme ceci
Ensuite vos différents Assistant instances juste besoin d'être compte tenu de la sous-jacentes de Caractères de l'objet comme un lieu de vente et d'obtenir des valeurs.
OriginalL'auteur S.Lott
Mon problème était en effet la confusion des classes contre les instances. J'essayais de tout faire via des classes sans jamais la création d'une instance réelle. De Plus, j'ai été oblige le "BasicInfoPage" classe à faire trop de travail.
En fin de compte, j'ai créé une nouvelle classe (BaseAttribs) pour contenir toutes les variables dont j'ai besoin. Ensuite, j'ai créé une instance de cette classe, quand je lance l'assistant et de transmettre cette instance comme un argument pour les classes qui en ont besoin, comme indiqué ci-dessous:
J'ai ensuite utilisé les informations S. Lott fourni et créé des instances individuelles (si c'est ce qu'il a appelé) au sein de chaque classe, chaque classe est d'accéder aux mêmes variables.
Tout fonctionne, autant que je puis dire. Merci.
OriginalL'auteur crystalattice
Tous vous avez besoin est une référence. Ce n'est pas vraiment un problème simple que je peux donner à certains une ligne de la solution (autre qu'une simple laid mondiale qui serait probablement casser quelque chose d'autre), mais un seul de la structure du programme. Vous ne vous sentez pas comme par magie accéder à une variable qui a été créé sur une autre instance d'une autre classe. Vous devez donner l'intelligence de référence pour les MOS, ou le prendre à partir de BasicInfoPage, mais cela pourrait arriver. Il me semble que les classes sont conçus plutôt bizarrement-- une page d'informations, pour une chose, ne devrait pas générer quoi que ce soit, et si elle le fait, elle doit donner en retour ce que doit savoir, une sorte de place centrale, qui doit avoir été le seul de sa génération à la première place. Normalement, vous définissez les variables, et les faire partir de là. Ou du moins, je le ferais.
Si vous voulez la réponse basique de "comment puis-je passer des variables entre les différentes classes", alors vous pouvez y aller, mais je doute que c'est exactement ce que vous voulez, que vous regardez à l'aide d'une sorte de contrôle de cadre:
OriginalL'auteur Devin Jeanpierre
Si je vous ai bien compris, alors la réponse est: Vous ne pouvez pas.
intelligence doit être un attribut de WizardPageSimple, si vous voulez les deux classes d'en hériter.
Selon votre situation, vous pouvez essayer d'extraire de l'intelligence et des attributs connexes dans un autre baseclass. Ensuite, vous pouvez hériter de deux:
Dans ce cas, vous doit utiliser la coopérative super. En fait, vous devriez être en utilisant déjà. Au lieu d'appeler
appel
OriginalL'auteur Antti Rasinen