مهدی
5 سال پیش توسط مهدی مطرح شد
2 پاسخ

ساخت کلاس Meta در جانگو

سلام خدمت همه
چجوری میشه یه متاکلاس مثل متاکلاس های جنگو ایجاد کرد؟

من خودم یه چیزی همینطوری نوشتم

class Serializer(type):
    def __new__(cls, name, bases, attrs):
        return type(name, bases, attrs)

class GlobalSerializer(metaclass=Serializer):
    pass

class UserLoginSerializer(GlobalSerializer):
    class Meta:
        Model = User
        Fields = fields = ['name', 'token', 'phone', 'username']

میخوام از اون کلاس Serializer به meta class اخر دست پیداکنم
میشه؟
اصلا روشش چجوریه؟


ثبت پرسش جدید
مهدی
@mahdi2606 5 سال پیش مطرح شد
0

استاد شما نظری ندارین @hesammousavi


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 5 سال پیش مطرح شد
0

کد زیر یک مثال هست فکر کنم میتونه بهتون در درکش کمک کنه

def make_hook(f):
    """Decorator to turn 'foo' method into '__foo__'"""
    f.is_hook = 1
    return f

class MyType(type):
    def __new__(mcls, name, bases, attrs):

        if name.startswith('None'):
            return None

        # Go over attributes and see if they should be renamed.
        newattrs = {}
        for attrname, attrvalue in attrs.iteritems():
            if getattr(attrvalue, 'is_hook', 0):
                newattrs['__%s__' % attrname] = attrvalue
            else:
                newattrs[attrname] = attrvalue

        return super(MyType, mcls).__new__(mcls, name, bases, newattrs)

    def __init__(self, name, bases, attrs):
        super(MyType, self).__init__(name, bases, attrs)

        # classregistry.register(self, self.interfaces)
        print "Would register class %s now." % self

    def __add__(self, other):
        class AutoClass(self, other):
            pass
        return AutoClass
        # Alternatively, to autogenerate the classname as well as the class:
        # return type(self.__name__ + other.__name__, (self, other), {})

    def unregister(self):
        # classregistry.unregister(self)
        print "Would unregister class %s now." % self

class MyObject:
    __metaclass__ = MyType

class NoneSample(MyObject):
    pass

# Will print "NoneType None"
print type(NoneSample), repr(NoneSample)

class Example(MyObject):
    def __init__(self, value):
        self.value = value
    @make_hook
    def add(self, other):
        return self.__class__(self.value + other.value)

# Will unregister the class
Example.unregister()

inst = Example(10)
# Will fail with an AttributeError
#inst.unregister()

print inst + inst
class Sibling(MyObject):
    pass

ExampleSibling = Example + Sibling
# ExampleSibling is now a subclass of both Example and Sibling (with no
# content of its own) although it will believe it's called 'AutoClass'
print ExampleSibling
print ExampleSibling.__mro__

منبعش


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام