首页 > 解决方案 > 在 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()方法正在初始化lengthheight属性。应该如何可视化一个Square对象?

标签: pythoninheritance

解决方案


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)

推荐阅读