嵌套类属性未被识别为 int



目标
我正在尝试创建一个练习脚本,该脚本存储可以添加新项目的菜单。 这些项目是"战斗动画"、"文本速度"或"字幕"之类的东西。 菜单将像这样打印出所有项目 (请注意,所有项目的间距都已调整为适合最大的间距(


| border color || (black) blue red green |
| Text Speed || slow (medium) fast |

图1

我的方法
本身MenuItem是一个类。它管理菜单项的内容,并存储打印时需要多少调整空间。 这个类本身工作得很好。如果仅使用 MenuItem 类方法创建和打印上述两个项,则它们将如下所示:
| border color || (black) blue red green |
| Text Speed |
| slow (medium) fast |
图 2

Menu是我制作的一个类,用于存储菜单项并调整其间距值,以便它们像图 1 一样打印。

我的代码
此代码已简化为仅显示可重现的错误。不包括值列表(黑色,蓝色,红色,绿色等(。
#!/usr/bin/env python3

class Menu(object):
class MenuItem(object):
def __init__(self, propertyTitle):
self.title = propertyTitle
self.printsize = (len(self.title)+4)
def printMenuItem(self):
f_indent = 2;
f_title = ((' '*f_indent)+ self.title.ljust(self.printsize-f_indent))
print('|',f_title ,'|',sep='')
def __init__(self):
self.width = 0;
self.items = [];
def addItem(self, pTitle):
f_menuItem = Menu.MenuItem(pTitle)
if(f_menuItem.printsize < self.width):
#if(f_menuItem.printsize < 5):
#adjusting padding on the smaller new menu item
f_menuItem.printsize = self.width
elif(f_menuItem.printsize > self.width):
#elif(f_menuItem.printsize > 5):
#adjusting padding on all past menu items to fit this new big item
self.width = f_menuItem
for x in self.items:
x.printsize = self.width
self.items.append(f_menuItem)
def printMenu(self):
for x in self.items:
x.printMenuItem()
print()
property_1_title = "border color";
property_2_title = "text speed";
myMenu = Menu()
#myMenu.items.append(myBorderColor)
#myMenu.items.append(myTextSpeed)
myMenu.addItem(property_1_title);
myMenu.addItem(property_2_title);
myMenu.printMenu()

问题
我收到以下错误:


line 20, in addItemif(f_menuItem.printsize < self.width):TypeError: '<' not supported between instances of 'int' and 'MenuItem'
line 24, in printMenuItem


f_title = ((' '*f_indent)+ self.f_title.ljust(self.printsize-f_indent))TypeError: unsupported operand type(s) for -: 'MenuItem' and 'int'

出于某种原因,python将MenuItem的类属性(整数(解释为MenuItem本身的类实例。 至少我是这样解释错误的。
关于此错误的奇怪之处在于,仅当 Menu 类的方法调用它内部存储的 MenuItem 实例上的 MenuItem 方法时,才会发生这种情况。
正如我之前提到的,当 MenuItem 类是唯一定义和使用过的类时,不会发生这些错误。
(同样,MenuItem 是否定义为 Menu 中的类,或者它是否定义为 Menu 之前的单独类也无关紧要。发生同样的错误(

我给你
的问题

为什么python将f_menuItem.printsizeself.printsize解释为MenuItems而不是int?
我可能会想出一种不同的方法来构建程序以避免这种情况。但这只是一个练习脚本。我只是真的想知道发生了什么来创建此错误。

你的问题出在addItem((中,特别是if语句的elif分支,其中包含以下行:self.width = f_menuItem这会损坏self.width,在第一次调用addIem时将其从int更改为MenuItem。因此,当第二次调用addItem时,比较会爆炸。

相关内容

  • 没有找到相关文章

最新更新