处理 kwargs 关键字的别名

问题描述 投票:0回答:1

我正在尝试创建最简单的代码来处理 kwargs 关键字的别名。例如,在 matplotlib 中,color='red' 也可以标记为 c='red'。下面的代码可以工作,但是有更好的方法吗?

我正在考虑开发一个知道关键字、别名、默认值和它们链接到的变量的类/结构。这些的列表或字典将在函数中声明,并且单个调用将解析 kwargs。

class Cylinder():
    def __init__(self,d:float,l:float):
        """ 
        d = diameter
        l = length
    
        """
        self.d:float = d
        self.l:float = l

        #Default values
        self.color:str = 'black'
        self.transparency:float = 0.0
        return

    def Plot(self, **kwargs):
        """
        Optional parameters:
            color or c          default 'black'
            transparency or tr  default  0.0
        """
        if 'color' in kwargs: 
            self.color = kwargs['color']
        elif 'c' in kwargs:
            self.color = kwargs['c']
            
        if 'transparency' in kwargs:
            self.transparency = kwargs['transparency']
        elif 'tr' in kwargs:
            self.transparency = kwargs['tr']

        print("Plotting....color = ", self.color, ' transparency = ', self.transparency)
        return
python alias keyword-argument
1个回答
0
投票

您可以创建一个实用函数来处理该问题:

def parse_kwarg(kwargs, aliases, default_value):
    for alias in aliases:
        try:
            return kwargs[alias]
        except KeyError:
            pass

    return default_value

class Cylinder:
    # ...

    def plot(self, **kwargs):
        color = parse_kwarg(kwargs, ('color', 'c'), self.color) 
        transparency = parse_kwarg(kwargs, ('transparency', 'tr'), self.transparency)

        print("Plotting....color = ", color, ' transparency = ', transparency)
© www.soinside.com 2019 - 2024. All rights reserved.