以下代碼是以float作爲其父類的基本Angle對象的初始化方法。允許子類在python中具有與其父類不同的* args和** kwargs
class Angle(float):
def __init__(self, value, vertex2 = None, vertex3 = None, atype = 'convex'):
#type-checking for the input args
try:
#checks for value arg
angle = value
if not (0 < value < 360):
angle %= 360
except TypeError:
#checks for three-vertice args
try:
angle = three_point_angle(value, vertex2, vertex3)
#three_point_angle is a function to calculate the
#convex angle between three vertices (i.e. at vertex2)
if atype == 'concave':
angle = 360 - angle
self._vdict = {}
for pos, vert in enumerate([value, vertex2, vertex3]):
self._vdict[pos] = vert
except:
raise TypeError(\
"You may only specify either an angle value, or three vertices from which \
to calculate the angle. You input a %s, %s and %s value." % (\
type(value), type(vertex2), type(vertex3)))
self.angle = angle
這個類背後的想法是,可以任一輸入爲角度的值,或指定三個頂點(和任選的角型參數)來自動計算角度。最後,self.angle始終被初始化,這就是所有算術發生的地方(所以__add__(self, other)
會影響self.angle
)。
它從float
繼承的原因是要繼承其反射和增強賦值的魔術方法,它們都在self.angle
上執行。
當試圖輸入三個頂點值時,就會出現問題。由於它從float
繼承,因此它不能接受一個以上的參數,因此會產生錯誤。我將如何解決這個問題?我的猜測是,我將不得不爲Angle
創建一個__new__
方法,以便它將被調用而不是超類',但我不知道我甚至可以從那開始,或者即使它是正確/最佳的方式去做這件事。
什麼是完整的錯誤追溯?我認爲這個問題不是你所描述的。 – jonrsharpe
'一個=角度(頂點(0,0),頂點(0,10),頂點(10,10))' 引出 '類型錯誤:浮子()採用至多1個參數(3中給出)' – user3002473