我在调用类中的函数时遇到了问题。代码片段是:
class CharacterGenerator(GridLayout):
def printcharacter(self,my_sb,my_cr,my_scm,my_scb):
printable_stats = print_stats(my_sb)
printable_rolls = print_rolls(my_cr)
printable_scm = print_scm(my_scm)
printable_scb = print_scb(my_scb)
# self.clear_widgets()
layout=BoxLayout(orientation='vertical')
stat_box=(Label(text_size=(300, None),
text='Stats\n' + str(printable_stats)))
rolls_box=(Label(text_size=(300, None),
text='Rolls\n' + str(printable_rolls)))
scm_box=(Label(text_size=(300, None),
text='SCM\n' + str(printable_scm)))
scb_box=(Label(text_size=(300, None),
text='SCB\n' + str(printable_scb)))
layout.add_widget(stat_box)
layout.add_widget(rolls_box)
layout.add_widget(scm_box)
layout.add_widget(scb_box)
wayout = Button(text='Way Out')
layout.add_widget(wayout)
def human(self,a,b):
if b==True:
self.Status="human"
race=self.Status
statblock = human()
characteristic_rolls = rolls(statblock)
skill_category_modifiers = scm(statblock)
skill_category_bonuses = scb(statblock)
CharacterGenerator.printcharacter (self, statblock, characteristic_rolls, skill_category_modifiers, skill_category_bonuses)
错误:
File "./charactergenerator.kv", line 36, in <module>
on_press: root.printcharacter()
TypeError: printcharacter() missing 4 required positional arguments: 'my_sb', 'my_cr', 'my_scm', and 'my_scb'
据我所知,我正在向printcharacter
函数发送正确的参数。相同的函数和调用在单独的python模块中使用printcharacter
。
我已经尝试了调用参数的所有组合,从列表中添加和删除了一些。如果没有CharacterGenerator.printcharacter
来电,我得到的是CharacterGenerator has no object printcharacter
和我回到原点的消息。
任何人都可以看到我出错的地方吗?
答案 0 :(得分:0)
您的错误似乎出现在第36行的charactergenerator.kv中。
你可以在没有参数的情况下调用函数“on_press:root.printcharacter()”。
所以用参数调用函数。
并更改此行
def printcharacter(self,my_sb,my_cr,my_scm,my_scb):
到
def printcharacter(self,my_sb,my_cr,my_scm,my_scb,*args):
答案 1 :(得分:-1)
使用 self
来调用代码CharacterGenerator.printcharacter(self, ...
中的函数 - 您没有将self作为第一个参数传递,因此正确的printcharacter
调用假设为:
self.printcharacter(statblock, characteristic_rolls, skill_category_modifiers, skill_category_bonuses)
您可以在What is the purpose of self?上详细了解self
。
很短:如果您在没有staticmethod或staticclass装饰器的类定义中定义了方法,它会接受类实例方法作为第一个参数被调用(按照惯例,第一个参数名为self
),该参数不应直接传递,因为它将在调用实例方法时自动传递。
我注意到printcharacter
方法无法与self
一起使用,因此您可以将其定义为staticmethod:
class CharacterGenerator(GridLayout):
@staticmethod
def printcharacter(my_sb,my_cr,my_scm,my_scb):
# method body
然后调用它:
# within execution of instance method
self.printcharacter(statblock, characteristic_rolls, skill_category_modifiers, skill_category_bonuses)
# Anywhere outside class method
CharacterGenerator.printcharacter(statblock, characteristic_rolls, skill_category_modifiers, skill_category_bonuses)