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.Screenactually 是什么(可能不是你想的那样)。 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