python中的多个构造函数

zhu*_*ren 5 python constructor

如何将以下两个类组合成一个类Rectangle,以便可以通过rect = Rectangle(side_a,side_b)或rect = Rectangle(side_a,area)创建Rectangle对象?

class Rectangle1:
    def __init__(self, side_a, side_b):
        self.side_a = side_a
        self.side_b = side_b
        self.area = self.side_a * self.side_b

class Rectangle2:
    def __init__(self, side_a, area):
        self.side_a = side_a
        self.area = area
        self.side_b = self.area / side_a
Run Code Online (Sandbox Code Playgroud)

Pid*_*ust 11

这表现在这里.

class Rectangle:

    def __init__(self, a, b):
        """ Create a new rectangle with sides of length a and b.
        """
        self.side_a = side_a
        self.side_b = side_b
        self.area = self.side_a * self.side_b

    @classmethod
    def from_sides(cls, a, b):
        return cls(a, b)

    @classmethod
    def from_area(cls, a, o):
        return cls(a, o/a)
Run Code Online (Sandbox Code Playgroud)

然后,您可以创建矩形

r1 = Rectangle.from_sides(s1, s2)
r2 = Rectangle.from_area(s1, a)
Run Code Online (Sandbox Code Playgroud)


Eri*_*dlo 0

这可能不是您想要的,但这是我想到的:

class Rectangle:
    def __init__(self, side_a, side_b = None, area = None):
         self.side_a = side_a
         if area == None:
            self.area = side_a * side_b
            self.side_b = side_b
         else:
            self.side_b = area / side_a
            self.area = area
Run Code Online (Sandbox Code Playgroud)