J'essaie de créer un objet de classe Si je le fais avec des informations d'identification code> et d'exécuter la méthode get_username_password code> dans l'objet de la classe session code>: B code>, b.Credentials code> est un objet code> type code> objet. p> p>
4 Réponses :
Je pense que vous recherchez:
class Credentials:
def __init__(
self,
username=None,
password=None,
client_id=None,
client_secret=None):
self.username = username
self.password = password
self.client_id = client_id
self.client_secret = client_secret
def get_username_password(self):
self.username = input("please enter your username: ")
self.password = input("please enter your password: ")
class Session:
def __init__(
self):
self.credentials = Credentials()
def get_username_password(self):
self.credentials.get_username_password()
Désolé, mais cela ne fonctionne pas pour moi. Par conséquent, je reçois la méthode get_username_password code> direct sous B code> et aussi sous b.Credentials code>.
Il est discutable s'il devrait s'agir d'un membre de en règle générale, gardez E / S de get_username_password code> est plus logique en tant que méthode de classe qui invite l'utilisateur pour les données, puis transmet les résultats à __ init __ code> comme em> indispensables arguments. < Pré> xxx pré> des informations d'identification code> du tout, car ce n'est pas quelque chose que vous devez appeler de session .__ init __ code> non plus. p> __ init __ code> autant que possible. p> p>
Le creux de votre problème est que vous instanciez deux références distinctes code> code> strong> objets. Vous instaniez A code> sous forme d'informations stry> code> strong> objet, puis vous instaniez un SPAR ( Code> strong> objet dans la session code> strong> objet. p>
Critiques CODE> STROND>. Cela signifierait que vous n'avez qu'un seul objet qui représente la classe dans son ensemble. En d'autres termes, où vous l'instanciez, vous aurez accès à la même instance EM> EM> forte> de Critiques code> strong> Propriétés. Voici un Tutoriel Si vous souhaitez examiner plus loin. Je ne pense pas que c'est ce que vous essayez de réaliser cependant. ** P>
p>
Vous pouvez essayer quelque chose comme ça. p> self.credentials = self.credentials.get_username_password () code>
Le problème ici est que self.credentials code> est un objet et que vous appelez la méthode get_username_password code> sur cet objet, mais cette méthode ne renvoie rien de sorte qu'il n'y a rien qui passe dans b .Credentials code> et cela devient donc un objet Aucun code> objet. class Credentials:
def __init__(
self,
username=None,
password=None,
client_id=None,
client_secret=None):
self.username = username
self.password = password
self.client_id = client_id
self.client_secret = client_secret
def get_username_password(self):
self.username = input("please enter your username: ")
self.password = input("please enter your password: ")
class Session:
def __init__(
self):
self.credentials = Credentials()
# self.credentials = self.credentials.get_username_password()
if __name__ == "__main__":
a = Credentials()
a.get_username_password()
b = Session()
b.credentials.get_username_password()
Pourquoi remplacez-vous immédiatement les informations d'identification code> code> que vous avez attribuées à
auto.Credentials code> avec la valeur renvoyée à partir de songet_username_password code> méthode (qui est en effet Aucun I>, comme cette méthode ne renvoie rien)?Pour
a code>,a.cripticides = informations d'identification () code> résultats dansA.Asername = Aucune code> etc., quea.get_username_password Code> EnsemblesA.Username == INPUT_STR CODE>. Cela fonctionne bien. PourB code> il ne fonctionne pas. Je m'attendrais également àB.Credentials.Username == INPUT_STR CODE>, mais comme je l'ai écrit ci-dessus, `B.Credentials 'est un objet de type" Aucun ".Veuillez relire le commentaire ci-dessus: vous attribuez
auto -.crédentials code> au résultat deget_username_password () code>, qui estAucun code>, comme cette méthode ne rien retourner. Vous avez juste à appeler i>automedentials.get_username_password () code>.Oui. Vous avez raison. Si je remplace
self.credentials = self.credentials.get_username_password () code> avec justeself.credentials.get_username_password () code> Je reçois ce que je voulais. Merci. Pourriez-vous expliquer le contexte avec le @ClassMethod?