簡體   English   中英

我可以在Python中調用基類的賦值運算符嗎?

[英]Can I call the assignment operator of my base class in Python?

Django的ImageField允許我使用常規分配將文件對象存儲在其中。

from urllib import request
from django.db import models
from django.core.files.base import ContentFile

class Customer(models.Model):
    logo = models.ImageField()

customer.logo = ContentFile(request.urlopen(url), 'image.png')

現在,我想從ImageField繼承自定義字段類型。 它以URL作為純字符串而不是文件對象進行分配。 在內部,它應該獲取圖像並將其分配給它的基類,就像上面的手動示例一樣。

from django.db import models

class UrlImageField(models.ImageField):
    def __set__(self, instance, value):
        super() = ContentFile(urllib.request.urlopen(value), 'image.png')

因此,我需要在ImageField基類上調用賦值運算符。 如何在Python中做到這一點?

賦值運算符不能重載。

您不想( 也不能 )重載分配,但您只想擴展ImageField描述符。 描述符在“ 描述符方法指南”中有詳細說明 您還應該看看: 了解__get__和__set__以及Python描述符

基本要點是它們定義了控制屬性訪問的 __set____get__方法。 這些方法只是普通方法,因此您必須完全將它們擴展為普通方法:

from django.db import models

class UrlImageField(models.ImageField):
    def __set__(self, instance, value):
        super().__set__(instance, ContentFile(urllib.request.urlopen(value), 'image.png'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM