Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
参数化Python类_Python_Class_Oop - Fatal编程技术网

参数化Python类

参数化Python类,python,class,oop,Python,Class,Oop,有没有办法在Python中参数化类?参数化类可能如下所示: class FIELDSerializer: FIELD = serializers.CharField(source='get_FIELD_display', required=False) class Meta: model = None fields = {FIELD} 需要创建以下三个类: class NameSerializer: name = serializers

有没有办法在Python中参数化类?参数化类可能如下所示:

class FIELDSerializer:
    FIELD = serializers.CharField(source='get_FIELD_display', required=False)

    class Meta:
        model = None
        fields = {FIELD}
需要创建以下三个类:

class NameSerializer:
    name = serializers.CharField(source='get_name_display', required=False)

    class Meta:
        model = None
        fields = {'name'}

class CategorySerializer:
    category = serializers.CharField(source='get_category_display', required=False)

    class Meta:
        model = None
        fields = {'category'}

class StateSerializer:
    state = serializers.CharField(source='get_state_display', required=False)

    class Meta:
        model = None
        fields = {'state'}

这是可能的还是不可能的?

您可以使用factory函数做任何您想做的事情,尽管按照您的要求获取内部变量属性并不是很简单:

def factory(FIELDname):

    class FIELDSerializer:

        class Meta:
            model = None
            fields = {FIELDname}

     settatr(FIELDSerializer, FIELDname, serializers.CharField(source=f'get_{FIELDname}_display', required=False))

     return FIELDSerializer

CategorySerializer = factory('category')
StateSerializer = factory('state')
NameSerializer = factory('name')
允许我们将属性的名称设置为FIELDname字符串。多亏了这个主意


我不知道有没有什么简单的方法可以避免在调用工厂时重复字段名和所需的类名,而不使用完全合法但通常会让程序员口齿不清的东西。

你可以用工厂函数做你想做的事,尽管按照您的要求获取内部变量属性并不十分简单:

def factory(FIELDname):

    class FIELDSerializer:

        class Meta:
            model = None
            fields = {FIELDname}

     settatr(FIELDSerializer, FIELDname, serializers.CharField(source=f'get_{FIELDname}_display', required=False))

     return FIELDSerializer

CategorySerializer = factory('category')
StateSerializer = factory('state')
NameSerializer = factory('name')
允许我们将属性的名称设置为FIELDname字符串。多亏了这个主意


我不知道有没有什么简单的方法可以避免在调用工厂时重复字段名和所需的类名,而不使用完全合法但通常会让程序员口齿不清的东西。

能否使用setattr来设置具有正确名称的字段?或者这只是实例字段而不是类字段?免责声明:我是一个好奇的第三方,不是OP.@Code学徒是的,你可以,setattr在任何对象上工作,类只是一个对象,就像在这方面的任何其他对象一样。警告,这看起来可能是Django,在这种情况下,有一些元类魔法可能会使它无法如此清晰地工作,但是这对于op wrote编写的类定义绝对有效。您可以使用setattr设置具有正确名称的字段吗?或者这只是实例字段而不是类字段?免责声明:我是一个好奇的第三方,不是OP.@Code学徒是的,你可以,setattr在任何对象上工作,类只是一个对象,就像在这方面的任何其他对象一样。警告,这看起来可能是Django,在这种情况下,有一些元类魔法可能会使它无法如此清晰地工作,但是这对于类定义是绝对有效的op wrote这是Django和Django Rest框架吗?这是Django和Django Rest框架吗?