Skip to main content
 首页 » 编程设计

python之在 Python 中级联可选参数

2025年05月04日16mfryf

我有一系列类,可以通过选择性地传递参数来创建,或者如果省略,它将使用默认数据结构。所有类都以相同的方式工作,因此:

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的方式来做到这一点?我查看了其他问题/答案,但似乎没有比上面更好的了。

请您参考如下方法:

如果你想传递可选参数给你的函数,你可以使用**kwags

def create_shape(key, **kwargs): 
    if key == 'square': 
        return square(**kwargs) 
    elif key == 'triangle': 
        return triangle(**kwargs) 

然后,您可以像这样调用您的工厂函数。

create_shape('triangle', vertices = [( 0,0), (1, 10)]) 

您的 Triangle 类的 init 函数将接收新的顶点值。