AttributeError:“ NoneType”对象没有属性“ print_Toy”

时间:2018-07-28 16:40:37

标签: python arrays class

我有一个非常简单的python代码,其中在构造函数中创建一个对象数组,但是每当我尝试调用显示函数以查看对象数组中的所有对象时,它都会返回此NoneType异常。

称为Toy的类是实际的对象类,如下所示:

class Toy:
__name=None
__cost=None

def __init__(self,name,cost):
 self.__name=name
 self.__cost=cost

def get_Name(self):
 return self.__name

def get_Cost(self):
 return self.__cost 

def print_Toy(self):
 print(" Name of the toy: ",self.__name)
 print(" Cost of the toy: ",self.__cost)

下面显示的类Toy_Bag包含对象数组,我正在构造函数中对其进行初始化。

from Toy import Toy

class Toy_Bag:
__toys=[None]

def __init__(self, no_of_toys):
 self.__create_Toy_bag(no_of_toys)

def __create_Toy_bag(self, no_of_toys):
 name,cost= None,0
 for toy in range(0, no_of_toys):
  print("\n Enter the name of the toy: ",end="")
  name=input()
  print("\n Enter the cost of the toy: ",end="")
  cost=int(input())
  toy=Toy(name,cost)
  self.__toys.append(toy)
 self.print_Toy_Bag() 

def print_Toy_Bag(self):
 for toy in self.__toys:
  toy.print_Toy()

enter image description here

Traceback (most recent call last):
File "Main.py", line 9, in <module>
toy_bag=Toy_Bag(3)
File "C:\Users\SONY\Desktop\Python Scripts\Tools\Toy_Bag.py", line 8, in __init__
self.__create_Toy_bag(no_of_toys)
File "C:\Users\SONY\Desktop\Python Scripts\Tools\Toy_Bag.py", line 19, in __create_Toy_bag
self.print_Toy_Bag()
File "C:\Users\SONY\Desktop\Python Scripts\Tools\Toy_Bag.py", line 23, in print_Toy_Bag
toy.print_Toy()
AttributeError: 'NoneType' object has no attribute 'print_Toy'

C:\Users\SONY\Desktop\Python Scripts\Tools>

我们非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您正在此处使用None的一个元素来初始化列表:

class Toy_Bag:
    __toys=[None]

然后您在def __create_Toy_bag(self, no_of_toys)内添加更多玩具-将会位于列表内的1到n位置。第一个停留在None

如果您打印__toys,则使用第一个Toy来调用None类的方法。

将其更改为

__toys=[]

如此

def print_Toy_Bag(self):
    for toy in self.__toys:  # first element is no longer None
        toy.print_Toy()

不再获得第一个元素为None


您可能想给How to debug small programs (#1)读-它可以帮助您调试自己的程序。如果您对如何“正确地”命名事物感兴趣:PEP-008: Style Guide也是一本不错的书(有关空格,私人成员以及其中包含的许多其他内容)。