Python关键字参数

Python关键字参数,python,Python,我有以下问题。 我想要一个对象类,它将预定义的对象作为关键字参数作为超类 但我得到了一个错误: ImportError: cannot import name Object 代码: 您不能导入您所在的模块。您必须将对象()实例化移动到类定义之后: class Object: defaultobject = None def __init__(self, name, superclass=None): self.__name = name if

我有以下问题。 我想要一个对象类,它将预定义的对象作为关键字参数作为超类

但我得到了一个错误:

ImportError: cannot import name Object
代码:


您不能导入您所在的模块。您必须将
对象()
实例化移动到类定义之后:

class Object:
    defaultobject = None

    def __init__(self, name, superclass=None):
        self.__name = name

        if superclass is None:
            superclass = self.defaultobject
            if superclass is None
                # No default set yet, use `self` instead (it'll *be* the default)
                superclass = self

        self.__superclass = superclass

Object.defaultobject = Object('defaultobject', None)
您始终可以向类定义添加更多属性,但要创建类的实例,首先需要定义它


超类为None
需要跳舞,因为这里有第22条军规;如果不先设置
Object.defaultobject
,则无法创建
Object
的实例。您不能这样做,因为您还没有创建默认值。

这个问题可以通过从父类中删除导入库来解决,父类也由其一些子类导入。如果您的子类也在使用导入对象,则从父类中删除该对象将解决此问题。

是否尝试在定义该对象的同一文件中导入该类?是的,我尝试了此操作,因为如果不这样做,编译器说:Undefined variable:Object导入语句的目的是什么?能够创建对象并将其存储在defaultobject
import
中用于导入模块。但是
Object
不是一个模块。如何访问defaultobject??我得到错误:未定义变量:defaultobject@user2221323字体啊,我在签名上没看到。更新后,改用sentinel默认值(
None
在这里可以)。仍然不工作:/superclass=self.defaultobject AttributeError:Object实例没有属性“defaultobject”@user2221323:Ah,您试图做的实际上是不可能的。让我想个办法解决这个问题。您在此处进入的自引用太多。如果我要使用def\uu str\uu(self)打印超类:返回“%s(%s)”%(self.\uu name,self.\uuu超类),我将得到“RuntimeError:超过最大递归深度”并运行到递归:/
class Object:
    defaultobject = None

    def __init__(self, name, superclass=None):
        self.__name = name

        if superclass is None:
            superclass = self.defaultobject
            if superclass is None
                # No default set yet, use `self` instead (it'll *be* the default)
                superclass = self

        self.__superclass = superclass

Object.defaultobject = Object('defaultobject', None)