python老是报参数未定义_Python:将“尚未定义”的类名称作为默认参数

我有一个“class1”,它必须能够创建一个对象

不同的班级名称.类名作为名为“friend”的参数传递.

我希望“friend”-argument默认为名为“class2”的类名.

另外,我需要对类“class2”具有相同的行为.

所以“class2”应该将“class1”作为默认的friend-argument:

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实例,创建一个创建class2实例的class1实例,等等.也许你真的想要传递一个实例而不是要实例化的类:

class class1(object):

def __init__(self, friend=None):

if friend is None:

self.friendInstance = class2(self)

else:

self.friendInstance = friend

同样适用于class2.这不是那么灵活,但它很简单.如果你真的想要灵活性,你可以这样做:

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,arguments,parameters,class,default-parameters

来源: https://codeday.me/bug/20190626/1297655.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值