我有一个非常简单的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()
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>
我们非常感谢您的帮助。
答案 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也是一本不错的书(有关空格,私人成员以及其中包含的许多其他内容)。