为什么我们不需要将 self 包含在 super() 中?
Why do we not need to include self in super()?
为什么在super()
关键字中,我们可以省略self
?
如果我们不省略呢?
class A:
def __init__(self, var1, var2):
"""
some code
"""
class B(A):
def __init__(self, varA, varB):
super().__init__(varA, varB)
"""
some code
"""
class Rectangle:
def __init__(self, length, width):
self.length = length
self.width = width
def area(self):
return self.length * self.width
def perimeter(self):
return 2 * self.length + 2 * self.width
class Square(Rectangle):
def __init__(self, length):
super(Square, self).__init__(length, length)
在Python3中,super(Square, self)调用等同于无参super()调用。第一个参数指的是子类 Square,而第二个参数指的是一个 Square 对象,在本例中是 self。您也可以用其他 类 调用 super():
class Cube(Square):
def surface_area(self):
face_area = super(Square, self).area()
return face_area * 6
def volume(self):
face_area = super(Square, self).area()
return face_area * self.length
为什么在super()
关键字中,我们可以省略self
?
如果我们不省略呢?
class A:
def __init__(self, var1, var2):
"""
some code
"""
class B(A):
def __init__(self, varA, varB):
super().__init__(varA, varB)
"""
some code
"""
class Rectangle:
def __init__(self, length, width):
self.length = length
self.width = width
def area(self):
return self.length * self.width
def perimeter(self):
return 2 * self.length + 2 * self.width
class Square(Rectangle):
def __init__(self, length):
super(Square, self).__init__(length, length)
在Python3中,super(Square, self)调用等同于无参super()调用。第一个参数指的是子类 Square,而第二个参数指的是一个 Square 对象,在本例中是 self。您也可以用其他 类 调用 super():
class Cube(Square):
def surface_area(self):
face_area = super(Square, self).area()
return face_area * 6
def volume(self):
face_area = super(Square, self).area()
return face_area * self.length