class ParamMeta(type):
def __str__(self):
return self.__name__
class Param(object):
__metaclass__=ParamMeta
class SomeParam(Param):
pass
我想要的是:
type(SomeParam)==Param
我如何实现这一目标?
更新:我需要更改哪些内容才能获得所需的行为?
Update2 :对于后人:这个问题完全是完全假的。请假装你没有看到它;)
答案 0 :(得分:6)
SomeParam
类对象的类型不是Param
,它是ParamMeta
,而type()
正确报告了这一点。你混淆了is-a和继承关系。 SomeParam
实例是一个Param
。另一方面,SomeParam
类对象从Param
类对象继承,但它不是类型的值 {{1 }}
对于子类关系,有内置Param
,它是{ - 1}}的类似关系:issubclass()
为真。
编辑:你无法做任何事情来实现isinstance
返回issubclass(SomeParam, Param)
,除了当然用一个返回基类的手写函数遮蔽名称type(SomeParam)
(这会非常误导和糟糕的风格)。