Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将重写方法计算出的值从子类返回给它';python中的s基类方法_Python_Overriding - Fatal编程技术网

如何将重写方法计算出的值从子类返回给它';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
    的所有子类,这种用法非常少见(通常不受欢迎)