为什么__init __()方法中的变量没有在子类中定义?

时间:2018-01-13 00:47:28

标签: python class subclass object-oriented-analysis

在子类ComputerGame中,Toy.__init__(self,n)n未定义。

当我尝试在基类中调用n函数时,为什么警告我变量__init__()未定义?简单地说,为什么Toy.__init__(self,n)在子类中不可调用?我已宣布ComputerGame (Toy):。为什么不继承方法Toy.__init__(self,n)

我应该在类外面声明变量吗?

class Toy:
  def __init__(self,n):
    self.__ToyName = n
    self.__ToyID = ""
    self.__Price = 0.00
    self.__MinimumAge = 4

  def SetToyName(self,p):
    self.__ToyName = p
  def SetToyID(self,d):
    self.__ToyID = d
  def SetPrice(self,i):
    self.__Price = i
  def SetMinimumAge(self,i):
    self.__MinimumAge = i
  def GetToyName(self):
    return (self.__ToyName)
  def GetToyID(self):
    return (self.__ToyID)
  def GetPrice(self):
    return (self.__Price)
  def GetMinimumAge(self):
    return (self.__MinimumAge)


class ComputerGame(Toy):
  def __init__(self):
    Toy.__init__(self,n)
    self.__Catogory = ""
    self.__Console = ""

  def SetCatogory(self,c):
    self.__Catogory = c
  def SetConsole(self,c):
    self.__Console = c
  def GetCatogory(self):
    return (self.__Catogory)
  def GetConsole(self):
    return (self.__Console)

1 个答案:

答案 0 :(得分:1)

这是一个范围问题:

class ComputerGame(Toy):
  def __init__(self):
    Toy.__init__(self,n)

这是n的首次亮相。当您创建ComputerGame时,您的__init__方法要求您(调用程序)在创建过程中提供n。这就是编写代码的方式。

上面的__init__假设n将无处不可思议地出现。我不清楚你期望从中得到什么数据流 - Python编译器也是如此。我不知道如何解决这个问题,因为你没有提供Minimal, complete, verifiable example。我们应该至少有一行主代码来创建对象。

一个很有可能的事情很简单:

class ComputerGame(Toy):
  def __init__(self, n):
    Toy.__init__(self, n)

NewFPS = ComputerGame(“Universal Uzi”)

这清楚了吗?