在实例化时动态更改对象类型

时间:2019-04-26 11:40:13

标签: python

我有一个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__方法,但是我不知道如何检查在新的类实例化中实际传递的参数

1 个答案:

答案 0 :(得分:0)

您可以创建一个handlerMethod来处理问题

def handler(yourDict):
    if len(yourDict) == 1:
         return Class2(yourDict)
     else:
         return Class1(yourDict)

然后调用处理程序而不是构造函数

TestInstance = handler(yourDict)