這個問題是關於Python繼承,但用Django的例子解釋,但這應該不會受傷。使用從其他類沒有繼承的方法
我有這樣的Django模型,用Page
和RichText
模型,以及:
class Gallery(Page, RichText):
def save(self, *args, **kwargs):
# lot of code to unzip, check and create image instances.
return "something"
我只是在另一個類使用save
方法感興趣。
一個解決辦法是:
class MyGallery(models.Model):
def save(self, *args, **kwargs):
# here goes the code duplicated from Gallery, the same.
return "something"
我想,以避免重複代碼,也我不感興趣,從Page
和RichText
繼承成員(所以我不想做class MyGallery(Gallery):
。如果是合法我會寫這樣的事:
class MyGallery(models.Model):
# custom fields specific for MyGallery
# name = models.CharField(max_length=50)
# etc
def save(self, *args, **kwargs):
return Gallery.save(self, *args, **kwargs)
但它不會起作用,因爲Gallery
的save()
預計Gallery
一個實例,而不是MyGallery
。
任何方式從Gallery
「分離」save()
方法,並在MyGallery
中使用它,因爲它是在那裏定義的?
編輯:
我忘了說,Gallery
,並給出不能改變。
我不反對一般的繼承,但在這種情況下,我是。如果'MyGallery'繼承自'Gallery',那麼子類將擁有我永遠不會使用的方法,所以對於我來說,擁有一些你不需要但是需要內存的東西似乎是無稽之談。然後,就Django的工作原理而言,繼承的類也會對新的數據庫字段(在我的方案中無用)作出貢獻。 – Paolo
最後,mixins不適合,因爲我無法更改'Gallery'類。 – Paolo
@Guandalino:我承認這不是你想要做到的,但我不相信從其他類繼承的Python方法比從子類到父類的簡單指針佔用更多空間。至於數據庫領域,我完全同意你的意見。我試過這樣做了幾次,這是一個尷尬,b)不直觀。祝你好運。 –