Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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_Subclass - Fatal编程技术网

Python 如何在函数中扩展局部类?

Python 如何在函数中扩展局部类?,python,subclass,Python,Subclass,这是我正在处理的结构 class myclass(): def function(self): class localclass(): params = {'a':1, 'b': 2} return localclass 我想在类localclass中添加参数,但不想直接在类“myclass”定义中添加参数。 所以我想调用/重写函数和/或类localclass,用该方法添加参数 params.update({'d':4,'e':5

这是我正在处理的结构

class myclass():
    def function(self):
        class localclass():
            params = {'a':1, 'b': 2}
        return localclass
我想在类localclass中添加参数,但不想直接在类“myclass”定义中添加参数。 所以我想调用/重写函数和/或类localclass,用该方法添加参数

params.update({'d':4,'e':5})

我该怎么做


谢谢。

您可以使用装饰师:

def update(func):
    def wrapper(*args):
        cls = func(*args)
        cls.params.update({'d': 4, 'e': 5})
        return cls
    return wrapper        

class myclass(object):
    @update
    def function(self):
        class localclass(object):
            params = {'a':1, 'b': 2}
        return localclass
演示:

>>> a = myclass()
>>> a.function().params
{'a': 1, 'b': 2, 'e': 5, 'd': 4}

我认为您希望执行以下操作,无需修改任何当前代码:

>>> obj = myclass()
>>> cls = obj.function()
>>> cls.params.update({'d': 4, 'e': 5})
>>> cls.params
{'a': 1, 'b': 2, 'e': 5, 'd': 4}

想想如果这个班不是“本地”的,你会怎么做。然后对函数返回的对象执行完全相同的操作。但是我的主类实际上是一个Django管理类,所以我不想创建一个新实例。我想在读取函数时添加参数。实际上我不想在类文件中写入,所以我改为使用:
super().func(*args)
cls.params.update()