在python中将属性应用于类方法时会发生什么?

时间:2013-12-07 22:22:53

标签: python django django-admin

我一直在学习python和django,并建立一个简单的博客作为测试。

我让Django管理员运行正常,并且正在尝试修改管理类以将图像缩略图引入列表视图。

使用Django documentation中的示例,我在我的管理类中使用以下内容使缩略图工作:

class ImageAdmin(admin.ModelAdmin):
list_display = ('thumbnail', "name", "created")


def thumbnail(self, image):
    return '<img src="%s" alt="%s" width="100px" />' % (image.url, image.name)
thumbnail.short_description = "Thumbnail"
thumbnail.allow_tags = True
thumbnail.admin_order_field = "name"

一切正常,但我不完全理解ImageAdmin.thumbnail的方法定义在做什么,它似乎在为方法添加属性。所以我希望有人可以帮我解释一下。

2 个答案:

答案 0 :(得分:2)

在Python中,类方法本身就是对象,您可以在它们上设置属性(严格来说,不是属性 - property在Python中具有特定含义)。然后,这些属性可用于任何可以访问该方法的属性 - Django将检查foo.thumbnail.allow_tags以查看它是否应该逃避调用foo.thumbnail()的结果。

有一些细微之处 - 绑定实例方法不允许设置属性,因此您无法实际分配给foo.thumbnail.allow_tags。但是在课堂上这样做很好。

如需完整说明,请查看PEP 232

答案 1 :(得分:0)

调用方法thumbnail以显示值。 Django允许您在其上设置用于其他目的的属性,例如admin(thumbnail.short_description = "Thumbnail")中的名称。因此,使用方法和在其上设置的属性。