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导入语句的目的是什么?能够创建对象并将其存储在defaultobjectimport
中用于导入模块。但是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)