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

Python类-超级变量

邹涵畅
2023-03-14
问题内容

下面的代码由于某种原因给我一个错误,有人可以告诉我这是什么问题。

基本上,我创建了2个Point&Circle类。Circle正在尝试继承Point类。

Code:


class Point():

    x = 0.0
    y = 0.0

    def __init__(self, x, y):
        self.x = x
        self.y = y
        print("Point constructor")

    def ToString(self):
        return "{X:" + str(self.x) + ",Y:" + str(self.y) + "}"

class Circle(Point):
    radius = 0.0

    def __init__(self, x, y, radius):
        super(Point,self).__init__(x,y)
        self.radius = radius
        print("Circle constructor")

    def ToString(self):
        return super().ToString() + \
               ",{RADIUS=" + str(self.radius) + "}"


if __name__=='__main__':
        newpoint = Point(10,20)
        newcircle = Circle(10,20,0)

错误:

C:\Python27>python Point.py
Point constructor
Traceback (most recent call last):
  File "Point.py", line 29, in <module>
    newcircle = Circle(10,20,0)
  File "Point.py", line 18, in __init__
    super().__init__(x,y)
TypeError: super() takes at least 1 argument (0 given)

问题答案:

看起来您可能已经修复了原始错误,该错误是由super().__init__(x,y)错误消息所指示的,尽管您的修复稍有不正确,而不是应该使用super(Point, self)Circlesuper(Circle, self)

请注意super(),在CircleToString()方法中还有一个错误调用的地方:

        return super().ToString() + \
               ",{RADIUS=" + str(self.radius) + "}"

这在Python 3上是有效的代码,但是在Python 2上super()需要自变量,将其重写如下:

        return super(Circle, self).ToString() + \
               ",{RADIUS=" + str(self.radius) + "}"

我还建议您取消行的延续,有关解决此问题的建议方法,请参见PEP
8
的“最大行长”部分。



 类似资料:
  • 主要内容:PHP 超级全局变量,PHP $GLOBALS,实例,PHP $_SERVER,实例,PHP $_REQUEST,实例,PHP $_POST,实例,PHP $_GET,实例超级全局变量在PHP 4.1.0之后被启用, 是PHP系统中自带的变量,在一个脚本的全部作用域中都可用。 PHP 超级全局变量 PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。 PHP 超级全局变量列表: $GLO

  • 问题内容: 我在使用Python super()和继承和属性时遇到了一个非常奇怪的问题。一,代码: 这很好。但是,我想要的(对我来说似乎是Pythonic) 即使不起作用 得到很好的价值。在这种情况下,x是同时定义了fset和fget的超类的属性。那为什么不起作用呢? 问题答案: 我试图找到正确的语言来支持这种行为的原由,以免给您一个“因为它就是”答案……但是似乎这个问题已经被问了不止一次了,并且

  • 我试图为一个最常见的场景编写一个单元测试。 问题是,到目前为止,测试失败了。当我试着调试测试时,我观察到null被注入到props中,这导致了NPE。当我从测试中删除类实现时,我可以看到props mock工作正常,但在m1()调用中失败了。有人能帮我一下我缺少什么吗?我试着用MockB b引用道具,比如b.props,但这也是NPE。非常感谢您的帮助。

  • 我的子类是,我需要在我的超类中使用字段和。我知道如何在子类中使用超类变量,但我必须学会如何做相反的事情?谢谢。

  • 问题内容: 我有一个带有很多参数的基类: 所有继承类都应运行基类的方法。 我可以在每个继承的类中编写一个将调用超类的方法,但这将是严重的代码重复: 自动调用超类的最Pythonic方法是什么? 问题答案: 如果有助于解决您的噩梦,请考虑使用 args和* kw。

  • 问题内容: 为什么我们不能覆盖子类中超类的实例变量? 问题答案: 因为如果您更改数据成员的实现,则很有可能会破坏超类(想象将超类的数据成员从float更改为String)。