gpt4 book ai didi

python - 从机器人框架中的不同类调用同名的python函数

转载 作者:太空宇宙 更新时间:2023-11-03 13:57:46 25 4
gpt4 key购买 nike

我有一个 python 类,它继承了多个类,并且有同名的 test_func()

parent.py

class parent:
def __init__(self, **kwargs):
self.ip = kwargs.get('ip')
self.name = kwargs.get('name')
self.local = kwargs.get('local')

class child1(parent):
def __init__(self,**kwargs):
parent.__init__(self,**kwargs)

def test_func(self):
print 'When local =true'
return self.name

class child2(parent):
def __init__(self,**kwargs):
parent.__init__(self,**kwargs)
def test_func(self):
print ("When local =False")
return self.ip


class child3(parent,child1,child2):
def __init__(self, **kwargs):
parent.__init__(self, **kwargs)

有一个环境文件,我在其中初始化类

from parent import parent
from child2 import child2
from child1 import child1

from parent import child3
server=child3(
ip = '10.20.11.10',
name ='pankaj',
local = False
)

我有一个 robotfile (Test.robot) 调用方法 test_func

*** Settings ***
Library parent.child3 WITH NAME wireshark_test
*** Variables ***
*** Test Cases ***
This is first
Invoking methods
*** Keywords ***
Invoking methods
log to console wireshark_test.test_func

我正在通过命令执行这个

pybot -V envSI.py Test.robot

我总是得到 child1 类的 test_func

期望:

local=True child1 类的 test_func别的child2

test_func

谁能指导我该怎么做?

最佳答案

I am always getting test_func of child1 class

之所以如此,是因为 Method Resolution Order在 python 中的多重继承中;另一个阅读是 https://www.python.org/download/releases/2.3/mro/ (不要介意网址中的旧版本)。

简而言之,当存在多重继承时——就像在您的示例中,class child3(parent,child1,child2),当存在对属性的访问时,python 将从左侧查找父类向右,直到找到匹配项(如果没有匹配项,则引发异常)。
当您调用 test_func() 时,解析从“parent”开始——未找到,然后转到“child1”——因为它有这个方法,所以它被挑选并执行。因此,对于从“child3”创建的对象,它始终是“child1”中的实现。

你能改变 MRO 吗?几乎没有(而且,如果您不是 101% 确定自己在做什么,您真的不想这样做)。您可以更改类的继承模式;或者你可以有不同的类对象——“child1”和“child2”,并根据你的情况调用相应的对象。

关于python - 从机器人框架中的不同类调用同名的python函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53278381/

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