簡體   English   中英

如何將通過重寫方法從子類計算的值返回到python中的基類方法

[英]How to return a value computed by overriding method from a subclass to it's base class method in python

我有一個這樣的基類:

class base(object):
    name = ""
    def __init__(self,name):
        self.user =user
    def context(self,value):
        return {}

取而代之的是,我創建了另一個子類,並在“ context”方法之上覆蓋了該子類:

class override(base):
    name = "New class"
    def context(self, value):
        a = []
        a = "hello","b"
        return a

我想創建一個插件,它們都具有針對上下文方法的不同定義(列表的不同值將返回)。 所以我想通過放置替代功能來做到這一點。

當我從另一個文件調用此base.context函數時。 應該發生以下情況:

  1. 列表即"a" (在覆蓋上下文方法中)應首先將其值返回給基本上下文方法。

  2. override.context方法獲取值后,base.context將對其進行一些更改后將該值返回到調用它的位置。

但是,當我調用此base.description方法時,它將直接從override.description方法返回一個值。 所以我無法對其進行更改:(

您所質疑的幾件事有些令人困惑,但我認為您想要的是類似於以下示例(python2.7)的東西:

class base(object):
    name = ""

    def __init__(self, name):
        self.user =user

    def context(self, value):
        return [value]


class override(base):
    name = "override"

    def context(self, value):
        base_context = super(override, self).context(value)
        a = ["hello", "a"] + base_context

    def description(self):
        return "override description"

您可以執行以下操作:

>>> a = override()
>>> override.context("value")
["hello", "a", "value"]
>>> override.description()
"override description"

但是,調用這些方法的base給出了不同的結果:

>>> a = base()
>>> a.context("value")
["value"]
>>> base.description()
Traceback (most recent call last):
    ...
AttributeError: 'base' has no attribute 'description'

雖然這不是您想要的,但還不是很清楚,因為您指的是base.contextoverride.context獲取值,而通常情況是相反的。 override.description 如果您確實希望base.contextoverride.context獲取值,則可以通過base.__subclasses__()來完成,但是您必須處理base所有子類,這種用法極為罕見(通常是不受歡迎的) )。

使用super(override, self).context(value)base類獲取context

但是您的示例有點令人困惑,因為:

1) base.context返回dict

2) a override.context變量a設置為列表,然后設置為元組,因此override.context返回元組

暫無
暫無

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

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