gpt4 book ai didi

python, 继承, super() 方法

转载 作者:太空宇宙 更新时间:2023-11-03 14:29:23 25 4
gpt4 key购买 nike

我是 python 的新手,我有下面的代码,但我无法开始工作:-这是继承,我有一个 circle 基类,我在 circle 类中继承它(这里只是单一继承)。

我知道问题出在 circle 类的 ToString() 函数中,特别是行 text = super(Point, self).ToString () +..这至少需要一个参数,但我明白了:

AttributeError: 'super' 对象没有属性 'ToString'

我知道 super 没有 ToString 属性,但是 Point 类有 -

我的代码:

class Point(object):
x = 0.0
y = 0.0

# point class constructor
def __init__(self, x, y):
self.x = x
self.y = y
print("point constructor")

def ToString(self):
text = "{x:" + str(self.x) + ", y:" + str(self.y) + "}\n"
return text

class Circle(Point):
radius = 0.0

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

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


shapeOne = Point(10,10)
print( shapeOne.ToString() ) # this works fine

shapeTwo = Circle(4, 6, 12)
print( shapeTwo.ToString() ) # does not work

最佳答案

您需要传入 Circle 类:

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

super() 将遍历第一个参数的基类以找到下一个 ToString() 方法,而 Point 不会没有使用该方法的父级。

有了这个改变,输出是:

>>> print( shapeTwo.ToString() )
{x:0.0, y:0.0}
{radius = 12}

请注意,您在 __init__ 中犯了同样的错误;您根本没有调用继承的 __init__ 。这有效:

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

然后输出变成:

>>> shapeTwo = Circle(4, 6, 12)
point constructor
circle constructor
>>> print( shapeTwo.ToString() )
{x:4, y:6}
{radius = 12}

关于python, 继承, super() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14086782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com