python中类的重写方法

2024-09-29 23:31:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我想重写类方法,而不是从类创建子类/扩展。在

例如:

from django.contrib import admin

class NewModelAdmin(admin.ModelAdmin):
    def formfield_for_dbfield(self, db_field, **kwargs):
        # some custom stuff

现在我不想更改从admin.ModelAdmin扩展到NewModelAdmin的所有类(aka模型)。但我也不想修改原始的django代码。在

有什么方法可以做到这一点吗?在


Tags: django方法fromimportselfforadmindef
3条回答

为了保持代码的可维护性,最好让您的各个ModelAdmin类从NewModelAdmin继承。这样,其他查看您的代码的开发人员(以及您,可能一到两年后)可以清楚地看到自定义formfield_for_dbfield行为的来源,以便在需要时对其进行更新。如果你是猴子补丁管理模型管理员,这将使跟踪问题或在以后需要时更改行为变得更加困难。在

我不是百分之百的清楚你想做什么,为什么你不想创建一个新的子类或有一个不同名称的方法。在

但在python中,通常可以执行以下操作:

class MyClass(object):
    def print_hello(self):
        print "not hello"

def real_print_hello():
    print "hello"

x = MyClass()
x.print_hello() # "not hello"
setattr(x, "print_hello", real_print_hello)
x.print_hello() # "hello"

相关问题 更多 >

    热门问题