我是元类的新手,可能会以意想不到的方式使用它们。我感到困惑的是,该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等于A,B或C。
另一方面,这是一个元类示例:
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)