【问题标题】:getting variable from the constructor [closed]从构造函数获取变量[关闭]
【发布时间】:2014-12-15 19:19:12
【问题描述】:

我尝试编写程序并从构造函数获取变量到方法,但我不知道该怎么做 :( 我在方法 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()

【问题讨论】:

  • 您应该使用self.p 进行分配和检索。

标签: python class oop methods


【解决方案1】:

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

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

       self.p = Przyklad(a)

然后,self.pDane 中可用

【讨论】:

    【解决方案2】:

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

    您应该尝试让liczba 成为全局变量(这很危险),或者让Dane 成为Przyklad 的后代(尽管这些名称......)。

    【讨论】:

      【解决方案3】:

      ap 是局部变量,不是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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-17
        • 2014-12-16
        • 1970-01-01
        • 2013-08-26
        • 1970-01-01
        • 2019-12-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多