gpt4 book ai didi

python - 使用python中嵌套类的参数调用父方法

转载 作者:行者123 更新时间:2023-11-28 22:37:36 27 4
gpt4 key购买 nike

class Parent(object):
def __init__(self):
self.text = "abc"
self.child = self.Child()

def run(self):
self.child.task()

def output(self, param1):
print(param1)

class Child(object):
def __init__(self):
self.text = "cde"

def task(self):
Parent.output(Parent, self.text) # I get the warning for this line


parent = Parent()
parent.run()

上面的代码按预期工作,但 IntelliJ IDEA 警告我这条消息“预期是 nested_classes.Parent 的实例,而不是类本身”我的代码有问题吗?谢谢!

最佳答案

您正在尝试将您的output 方法(它是一个实例方法)作为类方法访问。消息出现是因为第一个参数 self 是实例对象,所以你将 class 作为第一个参数传递实际上会改变 self< 的内容 应该有一个实例对象。这就是消息试图告诉你的。所以,您实际上应该做的是将该方法作为实例方法调用:

Parent().output(self.text)

根据您的操作,如果您在 output 方法中检查 reprself 对象的内容,您会得到这个:

def output(self, param1):
print(repr(self))
print(dir(self))
print(param1)

使用这种调用方式:Parent.output(Parent, self.text)

<class '__main__.Parent'>
[
'Child', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__',
'__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', '__weakref__', 'output', 'run'
]

如您所见,您的self 中没有Parent实例

现在,如果您将其作为实例方法调用:Parent().output(self.text)

<__main__.Parent object at 0x1021c6320>
[
'Child', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__',
'__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'__weakref__', 'child', 'output', 'run', 'text'
]

如您所见,您现在有一个 Parent 对象,如果您查看该对象的内容,您会得到您期望从实例属性中得到的内容。

关于python - 使用python中嵌套类的参数调用父方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36380431/

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