我有一个MetaClass,此刻,它只是返回一个类的obj。
从此MetaClass中,我删除了两个不同的类。这些类之间的区别在于,其中一个类将字典传递给__init__
,而另一类则不传递给字典。
如果此字典仅包含一个条目,则我希望python返回另一个类的实例,而不是实际调用的那个实例。
class _MetaClass(type):
def __new__(cls, name, bases, dct):
return super(_MetaClass, cls).__new__(name, bases, **dct)
class Class1(object):
__metaclass__ = _MetaClass
def __init__(self, someargs):
pass
class Class2(object):
__metaclass__ = _MetaClass
def __init__(self, someargs, kwargs):
if len(kwargs) == 1:
return Class1(someargs)
else:
pass
TestInstance = Class2("foo", {"bar":"foo"}) #should now be Class1 instance because only one item in dct
如果像这种情况下的字典只有len(dct) == 1
,那么它应该使用传递给其__init__
的“ foo”创建Class1的实例,而不是像这样返回Class2的实例通常会
我尝试为MetaClass实现__new__
和__init__
方法,但是我不知道如何检查在新的类实例化中实际传递的参数
答案 0 :(得分:0)
您可以创建一个handlerMethod来处理问题
def handler(yourDict):
if len(yourDict) == 1:
return Class2(yourDict)
else:
return Class1(yourDict)
然后调用处理程序而不是构造函数
TestInstance = handler(yourDict)