2014-12-15 2 views
2

Я пытаюсь написать программу и получить переменную от конструктора к методу, но я не знаю, как это сделать :(Я получаю сообщение об ошибке с p.liczba в методе sprawdz. иметь здесь ряд от пользователя. Такая же ситуация с p.wielokrotnosc. Я знаю, что я могу написать эту программу проще, но мне очень хотелось бы узнать ООП с простыми примерами, как этотполучение переменной из конструктора

class Przyklad: 
     def __init__(self, liczba): 
      self.liczba = liczba 

     def podajSzukana(self): 
      self.wielokrotnosc = 3 

class Dane: 

     def wczytaj(self): 
      a = int(input('Podaj mi liczbę ')) 

      p = Przyklad(a) 

     def sprawdz(self): 
      if (p.liczba % p.wielokrotnosc == 0): 
       return true 

print ('Witaj w programie szukającym wielokrotność liczby 3 \n') 
d = Dane() 
d.wczytaj() 
d.sprawdz() 
+0

Вы должны использовать 'self.p' для назначения и извлечения. – jonrsharpe

ответ

0

Это происходит потому, что переменная liczba содержится в классе Przyklad, поэтому при попытке получить к ней доступ в Dane, это невозможно.

Вы должны попытаться присвоить liczba глобальную переменную (что опасно) или иметь Dane быть потомком Przyklad (эти имена, хотя ....).

1

Проблема не в получении переменной от конструктора Przyklad. Проблема заключается в ее сохранении в Dane. Общая процедура, чтобы прикрепить ее к экземпляру Dane:

def wczytaj(self): 
     a = int(input('Podaj mi liczbę ')) 

     self.p = Przyklad(a) 

Тогда вы будете иметь self.p доступны в Dane

0

a и p локальные переменные не члены Dane. Вы должны использовать self. (как указано на jonrsharpe), чтобы иметь возможность получить доступ к этой переменной из контекста класса:

class Dane: 

    def wczytaj(self): 
     a = int(input('Podaj mi liczbę ')) 

     self.p = Przyklad(a) 

    def sprawdz(self): 
     if (self.p.liczba % self.p.wielokrotnosc == 0): 
      return true 

Другая проблема заключается в том, что self.wielokrotnosc не существует, пока вы не вызовете podajSzukana(self) метод. Один из способов исправить это вызывает эту функцию внутри вашего конструктора:

class Przyklad: 
    def __init__(self, liczba): 
     self.liczba = liczba 
     self.podajSzukana()  // Call the method here. 

    def podajSzukana(self): 
     self.wielokrotnosc = 3 
Смежные вопросы