当前位置: 首页 > 面试题库 >

如果派生类中的基类属性被覆盖,该如何调用基类的属性?

尉迟鸿熙
2023-03-14
问题内容

我正在将我的某些类从对getter和setter的广泛使用改为对属性的更pythonic的使用。

但是现在我陷入了困境,因为以前的一些getter或setter方法会调用基类的相应方法,然后执行其他操作。但是如何通过属性来实现呢?如何在父类中调用属性getter或setter?

当然,仅调用属性本身即可进行无限递归。

class Foo(object):

    @property
    def bar(self):
        return 5

    @bar.setter
    def bar(self, a):
        print a

class FooBar(Foo):

    @property
    def bar(self):
        # return the same value
        # as in the base class
        return self.bar # --> recursion!

    @bar.setter
    def bar(self, c):
        # perform the same action
        # as in the base class
        self.bar = c    # --> recursion!
        # then do something else
        print 'something else'

fb = FooBar()
fb.bar = 7

问题答案:

您可能认为您可以调用由属性调用的基类函数

class FooBar(Foo):

    @property
    def bar(self):
        # return the same value
        # as in the base class
        return Foo.bar(self)

尽管我认为这是最明显的尝试- 它不起作用,因为bar是属性,而不是可调用的。

但是属性只是一个对象,使用getter方法可以找到相应的属性:

class FooBar(Foo):

    @property
    def bar(self):
        # return the same value
        # as in the base class
        return Foo.bar.fget(self)


 类似资料:
  • 问题内容: 因此,此代码的输出为。现在,我想到了一个问题:作为 派生 类对象的 po 怎么能调用作为基类的 PrivateOverride 的私有方法? 问题答案: 因为您在类中定义了main方法。如果将main方法放在Derived类中,它将无法编译,因为在该类中不可见。 class中的po.f()调用不是多态的,因为in 类为,所以in class中的值不会被覆盖。

  • 假设我有一个没有数据的类: 和派生类 Empty类的对象的大小为1。派生类的空部分的大小通常为0。据我所知,编译器看到基Empty类没有数据,因此它可以优化Empty的大小,以防它“在”Derived中,但标准并不要求这样做。 所以问题是: 我能在编译时确定Derived类的Empty部分并没有占用内存吗。 我知道我可以像一样进行检查...但它太冗长了,并且有几个类,如派生。有没有更优雅的解决方案

  • 我有一个应用程序,它由一个服务器组成,该服务器可以有多个两种类型的客户端,即用户客户端和设备客户端。为此,我有一个客户端基类的向量,我将在其中添加新客户端,因为它们连接到服务器。这是我所拥有的简化版本: 我有下面的UML表示: 我怀疑这张图是否代表了正确的意图。也许我对UML不是很有经验,这就足够了,但是我认为这个图没有清楚地描述服务器中的向量将包含用户和设备而不是客户端的事实。我不知道我是否需要

  • 给定给定类的投影,有没有办法告诉Spring包含在投影注释类型中定义的类的所有默认属性? 给定2实体类 } 和 每个都有一个储存库 - 我为客户端获得以下默认json: 有没有一种方法可以创建一个投影,该投影将返回客户机的所有属性,而不必为客户机中的所有属性编写所有getXXX方法 这样我可以在调用时在客户端JSON中嵌入省http://127.0.0.1:8080/api/rest/Client

  • 我想测试,为此,我需要模拟调用。为此,我尝试了以下方法,但没有成功: 仍然在调用真正的而不是返回模拟响应。 如何使用Mockito模拟对的调用?

  • 如何使类示例推断类型基于实例值检查: 打字沙盒。