我有一系列可以通過傳遞參數來創建的類,或者如果忽略,它將使用默認的數據結構。所有類以相同的方式工作,即:在Python中級聯可選參數
class square(object):
_vertices = [ (0, 0), (0, 10), (10, 10), (10, 0) ]
def __init__(self, vertices=_vertices):
# more stuff ...
class triangle(object):
_vertices = [ (0, 0), (5, 10), (10, 10) ]
def __init__(self, vertices=_vertices):
# more stuff ...
# ... more classes
我也有一個工廠函數,它接受一個字符串,並創建一個合適的對象
def create_shape(key)
if key == 'square':
return square()
elif key == 'triangle':
return triangle()
雖然自然,這並不讓我通過頂點參數
shape1 = create_shape('square') # OK, basic creation
shape2 = create_shape('triangle', my_own_vertices) # Not OK, param 2
# can't go through factory
我的方式輪,這是美化廠區如下,但是,對我來說,這似乎的處理事情很笨拙的方式。
def create_shape(key, vertices=None):
if key == 'square':
return square(vertices) if vertices else square()
elif key == 'triangle':
return triangle(vertices) if vertices else triangle()
從本質上說,我只是想通過一個可選的參數,而頂層(create_shape
)知道默認的應該是什麼。有沒有更清晰/更簡單/更pythonic的方式來做到這一點?我已經看過其他問題/答案,但沒有比上述更好的了。