[英]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
函數時。 應該發生以下情況:
列表即"a"
(在覆蓋上下文方法中)應首先將其值返回給基本上下文方法。
從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.context
從override.context
獲取值,而通常情況是相反的。 override.description
。 如果您確實希望base.context
從override.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.