class Rectangle(object): def __init__(self, width, height): self.width = width self.height = height @property def perimeter(self): return 2 * (self.width + self.height) @property def square(self): return self.width * self.height def set_width(self, value): self.width = value def set_height(self, value): self.height = value class Square(Rectangle): def __init__(self, a): super(Square, self).__init__(a, a) def set_side(self, value): self.width = value self.height = value set_width = set_side set_height = set_side if __name__ == '__main__': rec = Rectangle(1, 2) print 'rec perimeter:', rec.perimeter print 'rec square:', rec.square rec.set_width(3) print 'rec perimeter:', rec.perimeter print 'rec square:', rec.square rec.set_width(5) assert rec.square == 10 sq = Square(2) print 'square perimeter:', sq.perimeter print 'square sqare:', sq.square sq.set_width(1) assert sq.square == 1 sq.set_width(30) assert sq.square == 900