Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从构造函数中获取变量_Python_Class_Oop_Methods - Fatal编程技术网

Python 从构造函数中获取变量

Python 从构造函数中获取变量,python,class,oop,methods,Python,Class,Oop,Methods,我试图编写一个程序,从构造函数中获取一个变量到一个方法,但我不知道怎么做:(我在sprawdz方法中得到了一个p.liczba错误。我想从用户那里得到一个数字。与p.wielokrotnosc情况相同。我知道我可以更容易地编写这个程序,但我真的很想用像这样的简单示例来学习OOP。) class Przyklad: def __init__(self, liczba): self.liczba = liczba def podajSzukana(s

我试图编写一个程序,从构造函数中获取一个变量到一个方法,但我不知道怎么做:(我在
sprawdz
方法中得到了一个
p.liczba
错误。我想从用户那里得到一个数字。与
p.wielokrotnosc
情况相同。我知道我可以更容易地编写这个程序,但我真的很想用像这样的简单示例来学习OOP。)

 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()

发生这种情况是因为变量
liczba
包含在类
Przyklad
中,因此当您尝试在
Dane
中访问它时,是不可能的


你应该试着让
liczba
成为一个全局变量(这很危险),或者让
Dane
成为
Przyklad
的后代(尽管这些名称……).

问题不是从
Przyklad
的构造函数中获取变量。问题是将其保存在
Dane
中。常见的过程是将其附加到
Dane
的实例:

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

       self.p = Przyklad(a)

然后,您将有
self.p
Dane
a
中可用,并且
p
是本地变量,不是
Dane
的成员。您必须使用
self.
(如Jornshape所指出的)才能从类上下文访问此变量:

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

您应该使用
self.p
来分配和检索。