本帖最后由 Virgo之最 于 2020-3-23 17:39 编辑
[Python] 纯文本查看 复制代码 import math
class Point(object):
def __init__(self, x, y):
self._x = x
self._y = y
def area(self):
return 0
def __str__(self):
return '({}, {})'.format(self._x, self._y)
class Circle(Point):
def __init__(self, x, y, radius):
super().__init__(x, y)
self._radius = radius
def area(self):
# S=2πr*r
return math.pi * self._radius * self._radius
def perimeter(self):
# C=2πr
return 2 * math.pi * self._radius
def __str__(self):
return 'Center={}, Radius={}'.format(super().__str__(), self._radius)
class Cylinder(Circle):
def __init__(self, x, y, radius, height):
super().__init__(x, y, radius)
self._height = height
def area(self):
# S=2πrr + 2πrh
return (super().area()) + (super().perimeter()*self._height)
def volume(self):
# V = Sh
return super().area()*self._height
def __str__(self):
return 'Cylinder: {}, Height={}'.format(super().__str__(), self._height)
if __name__ == "__main__":
cy = Cylinder(1, 2, 1, 4)
print(cy)
print('表面积: {}'.format(cy.area()))
print('体积: {}'.format(cy.volume()))
输出是这样的:
[Shell] 纯文本查看 复制代码 Cylinder: Center=(1, 2), Radius=1, Height=4
表面积: 28.274333882308138
体积: 12.566370614359172
学java时候比较经典的一个例子
写的急 没加注释, 如果是初学者可以尝试自己去加一下注释
主要还是公式,还有对继承的理解.
代码中公式记得不清了 没查 没准会有错误
建议提前查查公式
---------------------------
还是简单解释一下吧, 题目中要求私有属性。
那么 __init__ 内部属性变量名开头就要加个下划线 _
关于super(), 简单理解就是调用父类
所以才会有 这类代码 super().area() 意思就是调用父类中的area函数
剩下就没啥了 全是数学公式
此题主要意思就是 学会在子类中如何调用父类中的方法 |