猿问

Square 子类的 __init()__ 函数中使用 super() 时,Square 对象具有

请考虑以下代码:


class Rectangle(object):

    def __init__(self, height, length):

        self.height = height

        self.length = length

    

    def area(self):

        return self.height * self.length

    

    def perimeter(self):

        return 2 * (self.height + self.length)


class Square(Rectangle):

    def __init__(self, length):

        super(Square, self).__init__(length, length)


s = Square(5)

s.area(), s.perimeter()

对象包含哪些属性Square——它只是length属性还是两者height兼而有之length?__init__()如果我们看到类方法的参数Square,它必须只包含length属性。但super()方法正在初始化length和height属性。一个人应该如何想象一个Square物体?


慕桂英546537
浏览 98回答 2
2回答

Qyouu

print(s.__dict__)给出{'height': 5, 'length': 5}所以,它具有这两个属性。附加信息:- 为了清楚起见,您还可以help在实例上使用。对于例如print(help(s))  That will give:Help on Square in module __main__ object:    class Square(Rectangle)     |  Square(length)     |       |  Method resolution order:     |      Square     |      Rectangle     |      builtins.object     |       |  Methods defined here:     |       |  __init__(self, length)     |      Initialize self.  See help(type(self)) for accurate signature.     |       |  ----------------------------------------------------------------------     |  Methods inherited from Rectangle:     |       |  area(self)     |       |  perimeter(self)     |       |  ----------------------------------------------------------------------     |  Data descriptors inherited from Rectangle:     |       |  __dict__     |      dictionary for instance variables (if defined)     |       |  __weakref__     |      list of weak references to the object (if defined)

Cats萌萌

正方形物体将具有高度和长度。Square 的构造函数仅接受长度,但这并不意味着 Square 可以拥有的唯一属性就是长度。当我们调用超类的构造函数时,它有两个高度和长度输入,两者仅传递长度。在父构造函数中,高度和长度设置为 length,这导致 Square 具有这两个属性。
随时随地看视频慕课网APP

相关分类

Python
我要回答