我正在努力处理我的代码,特别是子类。我有一个父类,初始化时会以对象列表的形式将其子类称为属性。我看过很多帖子,其中一个人忘记拨打父母的__init__()
。我的问题不同,因为父母正在调用子类,我不想调用它。
我收到以下错误:
NameError: name 'bundle' is not defined
我很困惑因为它被明确定义为父类。有什么想法吗?
class bundle(object):
"""Main object to hold graphical information"""
def __init__(self, size,nzone):
self.size = size
self.rows = math.sqrt(size)
self.cols = math.sqrt(size)
subchans = []
r = 1
c = 1
for i in range (1,self.size):
subchans.append(bundle.subbundle(r,c,self.rows,self.cols))
r += 1
if r > self.rows :
r = 1
c += 1
class subbundle(bundle):
""" Defines geometry to represent subbundle"""
def __init__(self, row, col, rows,cols):
答案 0 :(得分:1)
当我运行您的代码时,我收到了以下行中的错误:
class subbundle(bundle):
那是因为您正试图从<{1}} 继承您的subundle
班级。我不知道那是不是你真正想做的事情。让我们假设它是。
当Python尝试解析bundle
文件时,它会在看到.py
后立即尝试找出类层次结构。当口译员到达class bundle
时,它还不知道({1}}是什么。将其移至与class subbundle(bundle)
:
bundle
您将不再看到当前的错误,并会开始看到一个新错误:class bundle
这是因为它试图将class bundle(object):
def __init__(self, size,nzone):
self.size = size
[ . . .]
class subbundle(bundle):
""" Defines geometry to represent subbundle"""
def __init__(self, row, col, rows,cols):
[ . . . ]
视为一种方法type object 'bundle' has no attribute 'subbundle'
,但不是。您可能希望将bundle.subbundle
中的代码更改为:
class bundle
PS :通常使用大写字母(又名 CamelCase )命名您的课程是一种很好的做法。请参阅https://www.python.org/dev/peps/pep-0008#class-names