如何在给定类名的情况下发现类的实例级字段

问题描述 投票:0回答:1

给定以下类,我想编写一个函数,当输入是类 Mock 时返回 a 。如果允许您使用 Mock 对象作为要编写的此函数的输入(您可以使用“_ dict_”或 vars 或检查等),则此任务很容易,但如果 Mock (类 Mock本身而不是 Mock 的对象)被用作输入,因为 vars、dir 或检查都不知道字段 a 的存在。

class Mock:
    def __init__(self, a):
        self.a=a
python member meta inspect
1个回答
0
投票

我不知道我是否明白你想要什么

但是你可以在类 Mock 中有一个方法,并具有特殊的不寻常名称(例如:

thisMethodExist

当你得到一个参数时,尝试从参数中调用这个方法,如果调用返回 True 则意味着该参数有一个名为

thisMethodExist
的方法,所以它可能是一个 Mock (如果你将该方法称为随机名称则更有可能)不太可能出现在任何其他班级。

如果出现异常,说明参数不是Mock实例

class Mock:
    def __init__(self, a):
        self.a = a

    @staticmethod
    def thisMethodExist():
        return True

    def checkMockInstance(self, param)
        try:
            if param.selfthisMethodExist():
                return self.a
        except AttributeError:
            return False
© www.soinside.com 2019 - 2024. All rights reserved.