小编M J*_*kes的帖子

为什么 python isinstance() 对于基类是可传递的,而对于元类是不可传递的?

我是元类的新手,可能会以意想不到的方式使用它们。我感到困惑的是,该isinstance()方法在处理子类时似乎具有传递行为,但在处理元类时却没有。

在第一种情况下:

class A(object):
   pass

class B(A):
    pass

class C(B):
     pass

ic = C()
Run Code Online (Sandbox Code Playgroud)

意味着isinstance(ic,X)是真正的X等于ABC

另一方面,这是一个元类示例:

class DataElementBase(object):
    def __init__(self,value):
        self.value = self.__initialisation_function__(value)

class MetaDataElement(type):
    def __new__(cls,name,initialisation_function, helptext ):
        result = type.__new__(cls,name,(DataElementBase,), dict(help=helptext) )
        result.__initialisation_function__  = staticmethod(initialisation_function)
        return result


###  test code  ####

# create a class from the metaclass
MyClass = MetaDataElement( 'myclass', float, "Value is obtained as float of user input" )

# create an instance …
Run Code Online (Sandbox Code Playgroud)

python metaclass

5
推荐指数
1
解决办法
127
查看次数

标签 统计

metaclass ×1

python ×1