[英]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.