例如我写了一个模块,作用是:几何表示系统。目前这个模块能够表示:点、圆、矩形三种几何图形,通过调用函数,可以得知几何图形的属性(例如点的坐标,圆的圆心、半径、面积,矩形的长宽面积等等)
代码如下:(只包含点、圆、矩形三种)
import os
import math
class Geometry(object):
def __init__(self):
pass
@property
def gtype(self):
return "gtUNKNOWN"
class Point(Geometry):
def __init__(self,x,y):
self._x=x
self._y=y
@property
def gtype(self):
return "gtPoint"
@property
def x(self):
return self._x
@x.setter
def x(self,v):
self._x=v
@property
def y(self):
return self._y
@y.setter
def y(self,v):
self._y=v
@property
def length(self):
return math.sqrt(self._x**2+self._y**2)
def __str__(self):
return "Point (%f,%f)"%(self._x,self._y)
def __repr__(self):
return self.__str__()
class Circle(Point):
def __init__(self,x,y,r):
Point.__init__(self,x,y)
self._r=r
@property
def area(self):
return math.pi*self._r*self._r
@property
def perimeter(self):
return 2*math.pi*self._r
@property
def gtype(self):
return "gtCircle"
@property
def r(self):
return self._r
@r.setter
def r(self,v):
if v>0:
self._r=v
else:
raise NameError()
def __str__(self):
return "Circle(%f,%f,%f)"%(self._x,self._y,self._r)
def __repr__(self):
return self.__str__()
class rectangle(Point):
def __init__(self,x,y,w,h):
Point.__init__(self,x,y)
self._w=w
self._h=h
@property
def gtype(self):
return "gtRectangle"
@property
def w(self):
return self._w
@w.setter
def w(self,v):
self._w=v
@property
def h(self):
return self._h
@h.setter
def h(self,v):
self._h=v
@property
def Perimeter(self):
return 2*self._w+2*self._h
@property
def area(self):
return self._w*self._h
def __str__(self):
return "Rectangle(%f,%f,%f,%f)"%(self._x,self._y,self._w,self._h)
现在我想再加一个包,能够表示折线,且这个折线有几个节点并不固定。我只知道固定折线上点的个数的话(例如只有2个点),可以像下面这么写。核心大体就是def __init__(self,x0,y0,x1,y1):
同样的,折线固定只有三个点,那么就是def __init__(self,x0,y0,x1,y1,x2,y2):
但是我不知道不固定该怎么写,希望各位高手帮个忙
class BROKENLINE(Geometry):
def __init__(self,x0,y0,x1,y1):
Geometry.__init__(self)
self._start=Point(x0,y0)
self._end=Point(x1,y1)
@property
def gtype(self):
return "gtBROKENLINE"
@property
def start(self):
return Point(self._start.x,self._start.y)
@start.setter
def start(self,v):
self._start.x=v.x
self._start.y=v.y
@property
def end(self):
return Point(self._end.x,self._end.y)
@end.setter
def end(self,v):
self._end.x=v.x
self._end.y=v.y
@property
def length(self):
return math.sqrt((self.end.x-self.start.x)**2+(self.end.y-self.start.y)**2)
def __str__(self):
return "BROKENLINE(%f,%f,%f,%f)"%(self._start.x,self._start.y,self._end.x,self._end.y)
def __repr__(self):
return self.__str__()
def __init__(self,*args)
args 时以各tuple,然后你再函数体里面可以检测元素个数和访问元素。