gpt4 book ai didi

Python:将 "not-yet-defined"类名作为默认参数

转载 作者:太空狗 更新时间:2023-10-30 03:07:27 25 4
gpt4 key购买 nike

我有一个“class1”,它必须能够创建一个对象不同的类名。类名作为称为“ friend ”的参数传递。我希望“ friend ”参数默认为名为“class2”的类名。

此外,我需要对“class2”类具有相同的行为。所以“class2”应该有“class1”作为默认的友元参数:

class class1():
def __init__(self, friend = class2):
self.friendInstance = friend()

class class2():
def __init__(self, friend = class1):
self.friendInstance = friend()

class1()
class2()

现在我收到以下错误消息:

    def __init__(self, friend = class2):
NameError: name 'class2' is not defined

当然,我不能在 class1 之前定义 class2 因为这将导致类似的错误:“class1”未定义。你知道解决方案吗?

非常感谢您的帮助!

亨利

最佳答案

你可以把它推到以后:

class class1(object):
def __init__(self, friend=None):
if friend is None:
friend = class2
self.friendInstance = friend()

编辑:实际上,不要那样做。它将创建一个 class2 实例,该实例创建一个 class1 实例,该实例创建一个 class2 实例,等等。也许您真的想传入一个实例而不是要实例化的类:

class class1(object):
def __init__(self, friend=None):
if friend is None:
self.friendInstance = class2(self)
else:
self.friendInstance = friend

对于 class2 也是如此。这不是那么灵活,但它非常简单。如果你真的想要灵 active ,你可以这样做:

class class1(object):
def __init__(self, friend=None, friendClass=None):
if friend is None:
self.friendInstance = (class2 if friendClass is None else friendClass)(self)
else:
self.friendInstance = friend

class class2(object):
def __init__(self, friend=None, friendClass=class1):
if friend is None:
self.friendInstance = friendClass(self)
else:
self.friendInstance = friend

这可以通过继承或元类来简化,但您可能明白了。

关于Python:将 "not-yet-defined"类名作为默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4648396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com