JOHN_16, зачем троллите новичка?
Amfibia, если по простому, то так.
class Shape(object):
sides_count = 0
def __init__(self):
if self.sides_count<3:
raise Exception("In the figure should be at least three sides")
self.initialized = False
self.initialize_begined = False
self.sides = list()
def begin_initialize(self):
self.initialize_begined = True
def add_side(self,side):
if not self.initialize_begined:
raise Exception("The figure should be able to initialize")
if side<0:
raise Exception("WHAT?")
self.sides.append(side)
def end_initialize(self):
if not self.initialize_begined:
raise Exception("The figure should be able to initialize")
if len(self.sides)>self.sides_count:
raise Exception("Too much sides")
if len(self.sides)<self.sides_count:
raise Exception("Too little sides")
self.initialize_begined=False
self.initialized = True
def ShapeFabric(sides_count, name):
return type(name,(Shape,),{"sides_count":sides_count})
BaseTriangle = ShapeFabric(3, "BaseTriangle")
class Triangle(BaseTriangle):
def normalize(self):
if len(filter(None,self.sides))==self.sides_count: return
if len(filter(None,self.sides))<2:
print "I want two katets"
return
katets = [x for x in self.sides if x>0]
katets_square = map(lambda x: x**2, katets)
katets_sum = sum(katets_square)
hypotenuse = math.sqrt(katets_sum)
self.sides = [katets[0], katets[1], hypotenuse]
triangle = Triangle()
triangle.begin_initialize()
triangle.add_side(3)
triangle.add_side(4)
triangle.add_side(0)
triangle.end_initialize()
triangle.normalize()
print triangle.sides