如何将重写方法计算出的值从子类返回给它';python中的s基类方法
我有这样一个基类:如何将重写方法计算出的值从子类返回给它';python中的s基类方法,python,overriding,Python,Overriding,我有这样一个基类: class base(object): name = "" def __init__(self,name): self.user =user def context(self,value): return {} 相反,我创建了另一个子类并重写了上述“上下文”方法: 我想创建一个插件,它们所有的都是上下文方法的不同定义(列表的不同值将返回)。所以我想通过设置覆盖功能来实现这一点 当我从另一个文件调用这个base.cont
class base(object):
name = ""
def __init__(self,name):
self.user =user
def context(self,value):
return {}
相反,我创建了另一个子类并重写了上述“上下文”方法:
我想创建一个插件,它们所有的都是上下文方法的不同定义(列表的不同值将返回)。所以我想通过设置覆盖功能来实现这一点
当我从另一个文件调用这个base.context
函数时。应该发生以下事情:
“a”
(在覆盖上下文方法中)应首先将其值返回给基本上下文方法override.context
方法中获取值后,base.context将在对该值进行一些更改后将该值返回到调用它的位置base.description
方法时,它将直接从override.description
方法返回一个值。所以我无法对其进行更改:(使用super(override,self).context(value)
从base
类获取上下文
但您的示例有点混乱,因为:
1) base.context
返回dict
2) override中的变量a
。context
设置为list,然后设置为tuple,因此override。context
返回tuple使用super(override,self)。context(value)
从base
类获取上下文
但您的示例有点混乱,因为:
1) base.context
返回dict
2) override中的变量a
。context
设置为list,然后设置为tuple,因此override.context
返回tuple您所问的一些问题有点让人困惑,但我认为您需要的是类似于此示例的内容(python2.7):
您可以执行以下操作:
>>> 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.\uuuu subclasses.\uuuu()
,但是您必须处理base
的所有子类,这种用法非常少见(通常不受欢迎).您提出的一些问题有点让人困惑,但我认为您想要的是类似于以下示例的内容(python2.7):
您可以执行以下操作:
>>> 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.\uuuu subclasses.\uuuu()
,但您必须处理base
的所有子类,这种用法非常少见(通常不受欢迎)