使用元类在类上键入函数

时间:2013-05-28 12:45:19

标签: python metaclass

class ParamMeta(type):
  def __str__(self):
    return self.__name__


class Param(object):
  __metaclass__=ParamMeta

class SomeParam(Param):
  pass

我想要的是:

type(SomeParam)==Param

我如何实现这一目标?

更新:我需要更改哪些内容才能获得所需的行为?

Update2 :对于后人:这个问题完全是完全假的。请假装你没有看到它;)

1 个答案:

答案 0 :(得分:6)

SomeParam类对象的类型不是Param,它是ParamMeta,而type()正确报告了这一点。你混淆了is-a和继承关系。 SomeParam 实例是一个Param。另一方面,SomeParam类对象Param类对象继承,但它不是类型的值 {{1 }}

对于子类关系,有内置Param,它是{ - 1}}的类似关系:issubclass()为真。

编辑:你无法做任何事情来实现isinstance返回issubclass(SomeParam, Param),除了当然用一个返回基类的手写函数遮蔽名称type(SomeParam)(这会非常误导和糟糕的风格)。