【问题标题】:adding two values from different classes添加来自不同类的两个值
【发布时间】:2021-12-14 05:35:30
【问题描述】:
class PolygonInteriorAngle(object):
    def __init__(self, x):
        self.x = self
    
    def FindInteriorAngle(self):
        degrees = int((x - 2) * 180)
        interior = int(degrees / x)
        return interior
    
    def PrintInterior(self):
        print("interior angle: " + str(self.FindInteriorAngle()))

class PolygonExteriorAngle(object):
    def __init__(self, x):
        self.x = self
    
    def FindExteriorAngle(self):
        exterior = int(360 / x)
        return exterior
    
    def PrintExterior(self):
        print("exterior angle: " + str(self.FindExteriorAngle()))

class AngleAddition(object):
    def __init__(self, x):
        self.x = self
    
    def Add(self):
        sum = int(interior + exterior)
        return sum
    
    def PrintAdd(self):
        print("sum of interior and exterior: " + str(self.Add()))
    
if __name__ == "__main__":
    x = int(input("enter: "))
    intObj = PolygonInteriorAngle(x)
    intObj.FindInteriorAngle()
    intObj.PrintInterior()
    extObj = PolygonExteriorAngle(x)
    extObj.FindExteriorAngle()
    extObj.PrintExterior()
    addObj = AngleAddition(x)
    addObj.Add()
    addObj.PrintAdd()

两个类(PolygonInteriorAngle 和 PolygonExteriorAngle)都可以正常工作,它们会打印出预期的效果。我想在 AngleAddition 类中做的是添加从其他两个类中获得的最终值(内部和外部)。我认为将它们放在不同的班级中效率很低,但这就是我的计算机科学老师要求我做的,我不确定如何在新班级中使用另一个班级的值。如果你做 x = 6,你会得到 120 和 60。使用 AngleAddition 我想打印 180。

【问题讨论】:

  • 那些不应该是类。您可能有一个名为“Angle”的类,并将这些东西作为该类中的方法,或者一个名为“Polygon”的类,它从多个边开始并返回外角和内角,但是为内角设置单独的类是没有意义的和外角,当一个直接来自另一个时。
  • 同意@TimRoberts。如果你仍然坚持做这样的事情,你可以查看 staticmethod 装饰器。您可以将它用作内部和外部最终的吸气剂。然后你的AngleAddition 类中有add_final_values() 方法,它需要两个参数来求和。

标签: python python-3.x class math integer


【解决方案1】:

一般cmets:

  1. 您需要非常仔细地检查实例方法中的变量。示例:
    def Add(self):
        sum = int(interior + exterior)
        return sum

interiorexterior 均未在实例方法参数中指定。

  1. 我同意用户:Tim Roberts 的评论。您可以创建一个基类“角度”并让“内/外角”类继承自“角度”类,或者只对内/外角使用角度类。这取决于您要如何为内/外角类编写 __init__ 方法。

  2. 请注意,我重写了魔术方法来执行两个角度的和。还有其他方法可以做到这一点,因为我正在重新定义 + 运算符。

无论如何:

class AngleBase:
  def __init__(self,angle):
    self.angle=angle

  def __add__(self,angleobj):
    return int(self.angle+angleobj.angle)

class PolygonInteriorAngle(AngleBase):
    def __init__(self, side):
        degrees = int((side - 2) * 180)
        interior = int(degrees / side)
        AngleBase.__init__(self,interior)
    
    def FindInteriorAngle(self):
        return self.angle
    
    def PrintInterior(self):
        print("interior angle: " + str(self.angle))

class PolygonExteriorAngle(AngleBase):
    def __init__(self, side):
        exterior = int(360 / side)
        AngleBase.__init__(self,exterior)
    
    def FindExteriorAngle(self):
        return self.angle
    
    def PrintExterior(self):
        print("exterior angle: " + str(self.angle))

class AngleAddition:
    def __init__(self, x):
        pass
    
    def Add(self,interior, exterior):
        sum = int(interior + exterior)
        return sum
    
    def PrintAdd(self,interior, exterior):
        print("sum of interior and exterior: " + str(self.Add(interior, exterior)))
    
if __name__ == "__main__":
    x = int(input("enter: "))
    intObj = PolygonInteriorAngle(x)
    print(intObj.angle)
    intObj.FindInteriorAngle()
    intObj.PrintInterior()
    extObj = PolygonExteriorAngle(x)
    extObj.FindExteriorAngle()
    extObj.PrintExterior()
    addObj = AngleAddition(x)
    addObj.Add(extObj,intObj)
    addObj.PrintAdd(extObj,intObj)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    相关资源
    最近更新 更多