2017-06-25 3 views
1

Je suis nouveau à Python, je veux appeler un getter d'un autre modulecomment appeler setter d'un autre module en python

menu.py

class settings(object): 
    def __init__(self): 
     self.fbType=None 

    @property 
    def fbType(self): 
     return self.fbType 
    @fbType.setter 
    def fbType(self, value): 
     self.fbType = value 

def main(): 
    print(20 * '-') 
    print(' M E N U') 
    print(30 * '-') 
    print('1. page') 
    print('2. event') 
    print(20 * '-') 

    choice = input('Enter your choice [1-5] : ') 
    choice = int(choice) 

    if choice == 1: 
     fbType = 'page' 
    elif choice == 2: 
     fbType = 'event' 
    else: 
     print('seleccion incorrecta') 


if __name__ == '__main__': 
    main() 

fb.py

import menu 
from menu import settings 

def main(): 
    menu.main() 
    m = settings() 
    l1 = fb.data(m.fbType(), 'python', 1) 
    print(l1) 

if __name__ == '__main__': 
    main() 

l'erreur qui me donne est la suivante

File "C:\Users\gabri\PycharmProjects\borrar\menu.py", line 10, in fbType 
self.fbType = value 
[Previous line repeated 493 more times] 

S'il vous plaît, pourriez-vous me donner un coup de main avec l'erreur? Merci à l'avance

+1

Vous avez deux attributs appelé 'fbType'. Je vous suggère de renommer un, par exemple: 'self._fbType = value' – cdarke

+1

J'espère que vous comprenez que (dans leur forme actuelle) le getter et le setter ici ne sont pas du tout nécessaires. Parfois, les gens qui viennent à python depuis des endroits comme java-land créent des getters et des setters non désirés. –

+0

Merci beaucoup pour la solution que vous m'avez envoyée –

Répondre

2

Fix pour votre code avec:

class settings(object): 
    def __init__(self): 
     self._fbType = None 

    @property 
    def fbType(self): 
     return self._fbType 

    @fbType.setter 
    def fbType(self, value): 
     self._fbType = value 

Else /\ boucle infinie, ici:

class settings(object): 
    def __init__(self): 
     self.fbType = None 

    @property 
    def fbType(self): 
     return self.fbType 

    @fbType.setter 
    def fbType(self, value): 
     self.fbType = value 

m = settings() 
m.fbType = 1 

Sortie:

RecursionError: maximum recursion depth exceeded 

Avec vous appelez def fbType(self, value) c'est une boucle infinie, self.fbType = value appeler à nouveau le poseur .... encore et encore ...

Do:

m.fbType # not m.fbType() to get 
m.fbType = 1 # not m.fbType(1) to set 

Ces getter et setter en python servent à faire un traitement uniquement avant ou après getter ou setter (ou de renommer un attribut _fbType par fbType par exemple).

Vous pouvez faire:

class settings(object): 
    def __init__(self): 
     self._fbType = None 

    @property 
    def fbType(self): 
     print('get fbType:', self._fbType) 
     return self._fbType 

    @fbType.setter 
    def fbType(self, value): 
     print('set fbType:', self._fbType, 'to', value) 
     self._fbType = value 

m = settings() 
m.fbType = 1 
m.fbType 

Sortie:

set fbType: None to 1 
get fbType: 1 
+0

Merci beaucoup pour la solution que vous m'avez envoyée –

+0

Une question: quand j'appelle m.fbType dans fb.py il retourne toujours Aucun, pourquoi? –

+0

Il s'agit de vos paramètres de classe constructor (objet): def __init __ (auto): self.fbType = Aucun – glegoux