创建一个类,该类的对象可以通过数学方式组合成具有适当派生方法的对象

2024-05-20 01:52:05 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一门课,如下所示:

import math

class RegularPolygon(object):
    def __init__(self, num_sides, side_len):
        self._num_sides = num_sides
        self._side_len = side_len

    def perimeter(self):
        return self._num_sides * self._side_len

    def apothem(self):
        return self._side_len / (2. * math.tan(math.pi / self._num_sides))

    def area(self):
        return self.perimeter() * self.apothem() / 2.

这让我可以定义以下几个对象:

unit_square = RegularPolygon(4, 1)
unit_pentagon = RegularPolygon(5, 1)
unit_octagon = RegularPolygon(8, 1)

我想要的是能够使用任何标准的数学运算(比如至少+-*/**)组合这个类的对象。我希望任何此类组合的结果都是一个对象,其方法将返回对组成对象调用的方法的结果执行的计算

例如,如果我写下:

a_pair_of_squares = unit_square + unit_square

我希望它是某种PolygonCollection对象。我想要

a_pair_of_squares.area()

归来

unit_square.area() + unit_square.area()

同样,如果我定义

a_shape_mashup = (unit_square + (2 * unit_pentagon)) / unit_octagon

我想要

a_shape_mashup.perimeter()

归来

(unit_square.perimeter() + (2 * unit_pentagon.perimeter())) / unit_octagon.perimeter()

a_shape_mashup.area()

应该回来

(unit_square.area() + (2 * unit_pentagon.area())) / unit_octagon.area()

这可能吗?最好的方法是什么


Tags: 对象selflendefunitareamathside