动态创建类型为 (Python) 的 类 时发生元类冲突
metaclass conflict upon dynamically creating classes with type (Python)
以下代码的目的是根据用户的输入动态创建class。
class BaseClass:
def __init__(self):
self.placeholder = ""
if __name__ == '__main__':
className = input("Please enter the name of new class: ")
baseClass = input("Please enter name of base class: ")
try:
newClass = type(className, tuple(baseClass), {})
print(f"Class {newClass} Created")
except TypeError as e:
print(e)
然而,输入后:
NewClass
BaseClass
我收到以下异常:
metaclass conflict: the metaclass of a derived class must be a
(non-strict) subclass of the metaclasses of all its bases
为什么程序无法识别 class BaseClass
? type
函数的正确用法是什么?
注:我是运行pythonv3.9.6.
示例程序输出片段:
基数必须是 class 而不是字符串,因此您需要从字符串名称中获取 class:
class BaseClass:
def __init__(self):
self.placeholder = ""
if __name__ == '__main__':
#className = input("Please enter the name of new class: ")
#baseClass = input("Please enter name of base class: ")
className = 'Foo'
baseClass = 'BaseClass'
baseClassObj = globals().get(baseClass, None)
if baseClassObj:
newClass = type(className, (baseClassObj, ), dict())
print(f"Class {newClass} Created")
else:
print('baseClass not found!')
输出:
Class <class '__main__.Foo'> Created
以下代码的目的是根据用户的输入动态创建class。
class BaseClass:
def __init__(self):
self.placeholder = ""
if __name__ == '__main__':
className = input("Please enter the name of new class: ")
baseClass = input("Please enter name of base class: ")
try:
newClass = type(className, tuple(baseClass), {})
print(f"Class {newClass} Created")
except TypeError as e:
print(e)
然而,输入后:
NewClass
BaseClass
我收到以下异常:
metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
为什么程序无法识别 class BaseClass
? type
函数的正确用法是什么?
注:我是运行pythonv3.9.6.
示例程序输出片段:
基数必须是 class 而不是字符串,因此您需要从字符串名称中获取 class:
class BaseClass:
def __init__(self):
self.placeholder = ""
if __name__ == '__main__':
#className = input("Please enter the name of new class: ")
#baseClass = input("Please enter name of base class: ")
className = 'Foo'
baseClass = 'BaseClass'
baseClassObj = globals().get(baseClass, None)
if baseClassObj:
newClass = type(className, (baseClassObj, ), dict())
print(f"Class {newClass} Created")
else:
print('baseClass not found!')
输出:
Class <class '__main__.Foo'> Created