TypeError: function() 参数 1 必须是代码,而不是 str
Posted
技术标签:
【中文标题】TypeError: function() 参数 1 必须是代码,而不是 str【英文标题】:TypeError: function() argument 1 must be code, not str 【发布时间】:2019-10-29 21:32:16 【问题描述】:我正在根据自己的喜好重新制作海龟模块(fishcode 是我重新制作的名称),但遇到了一个无法修复的错误。
我已经在 *** 上搜索了错误并在此处找到了错误,但这些都没有帮助。
fishcode模块代码:
import turtle
class Window(turtle.Screen):
def __init__(self):
turtle.Screen.__init__(self)
测试模块的.py文件代码:
import fishcode
bob = fishcode.Window()
所以我在导入 fishcode 时遇到错误 我希望它能做一个乌龟屏。
【问题讨论】:
检查turtle.Screen
actually 是什么(可能不是你想的那样)。
Error when calling the metaclass bases: function() argument 1 must be code, not str的可能重复
【参考方案1】:
来自Turtle documentation:
TurtleScreen 类 将图形窗口定义为绘制海龟的游乐场。它的构造函数需要一个 tkinter.Canvas 或一个 ScrolledCanvas 作为参数。当turtle被用作某些应用程序的一部分时,应该使用它。
函数 Screen() 返回 TurtleScreen 子类的单例对象。当海龟作为一个独立的工具来做图形时,应该使用这个函数。 作为单例对象,无法从其类继承。
您正在尝试从函数派生。 You can't do that. 只能从类派生。
此外,根据上面最后的粗体段落,您将无法从 TurtleScreen 类派生。所以你不能做你想做的事。
无论如何,如果您所做的只是包装 Turtle 代码,它就不会是“重制”。 ;)
【讨论】:
【参考方案2】:我一般同意@LightnessRacesinOrbit 的回答,但我不同意:
此外,根据上面最后加粗的段落,您将无法 从 TurtleScreen 类派生。所以你不能做什么 你正在尝试做。
直到需要才创建单例实例,因此可以继承TurtleScreen
。这可能最好在 tkinter 下使用 embedded turtle 时完成:
import tkinter
from turtle import TurtleScreen, RawTurtle
class YertleScreen(TurtleScreen):
def __init__(self, cv):
super().__init__(cv)
def window_geometry(self):
''' Add a new method, or modify an existing one. '''
width, height = self._window_size()
return (-width//2, -height//2, width//2, height//2)
root = tkinter.Tk()
canvas = tkinter.Canvas(root)
canvas.pack(side=tkinter.LEFT)
screen = YertleScreen(canvas)
turtle = RawTurtle(screen)
print(screen.window_geometry())
turtle.dot(50)
screen.mainloop()
虽然我相信它也适用于独立海龟,但从一个版本到下一个版本的变化可能更大。
【讨论】:
"作为一个单例对象,从它的类继承是不可能的。"这里指的是Screen()
的返回类型,而不是TurtleScreen
。
@Goyo,既然我已经在上下文中重新阅读了这句话,我同意并从我的回答中删除了与它的特别分歧。谢谢。以上是关于TypeError: function() 参数 1 必须是代码,而不是 str的主要内容,如果未能解决你的问题,请参考以下文章
类中的函数错误:TypeError:函数()缺少 1 个必需的位置参数:
opencv TypeError:“插值”是此函数的无效关键字参数
使用reactantd组件报错TypeError: _this.formRef.current.validateFields is not a function
使用reactantd组件报错TypeError: _this.formRef.current.validateFields is not a function
使用reactantd组件报错TypeError: _this.formRef.current.validateFields is not a function
使用reactantd组件报错TypeError: _this.formRef.current.validateFields is not a function