Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在_init__函数中处理多个参数的优雅方法_Python_Python 3.x - Fatal编程技术网

Python 在_init__函数中处理多个参数的优雅方法

Python 在_init__函数中处理多个参数的优雅方法,python,python-3.x,Python,Python 3.x,我有一个followinit函数,它接收许多参数来运行这个类(如果用户不输入任何内容,这些参数就是默认值,或者可以是用户输入的值)。减少变量数量(在init中不显示很多参数)而不丢失可读性的最优雅的方法是什么?使用*args函数(如def_u_uinit_u_u(self,*args)) Obs:我正在使用Python3+在我看来,您可能应该坚持使用函数头中的所有函数参数(正如您目前使用的那样)。这使您的代码更具可读性,允许Python告诉您可能忽略了哪些参数,可以很好地使用Python内置的h

我有一个followinit函数,它接收许多参数来运行这个类(如果用户不输入任何内容,这些参数就是默认值,或者可以是用户输入的值)。减少变量数量(在init中不显示很多参数)而不丢失可读性的最优雅的方法是什么?使用*args函数(如def_u_uinit_u_u(self,*args)


Obs:我正在使用Python3+

在我看来,您可能应该坚持使用函数头中的所有函数参数(正如您目前使用的那样)。这使您的代码更具可读性,允许Python告诉您可能忽略了哪些参数,可以很好地使用Python内置的
help()
方法,允许第三方IDE代码提示,等等


如果您确实想缩短函数头,可以使用
*args
**kwargs
这两个参数,它们将接受任何可变参数,例如:

def func(self,*args,**kwargs):
打印(“参数:”,参数)
打印(“kwargs:,kwargs”)
用法如下所示:

func(1,2,3,one=“一”,two=“二”) args:(2,3) kwargs:{'one':'one','two':'two'} 因此,从理论上讲,您可以重构类,使其看起来如下所示。这段代码根本不处理默认值或任何错误检查——它只是将任何关键字参数设置为类本身的属性:

类世界(对象):
定义初始(自我,**kwargs):
对于键,kwargs.items()中的值:
setattr(自身、键、值)
使用方法:

>w=World(一=1,二=2,三=3)
>>>w.one
1.
>>>w.2
2.
>>>w.3
3.

您还可以使用classmethod或public方法作为工厂模式。我遵从@tdelaney。您使用的变量是正确的。这是正确的方法,尤其是当涉及默认值时。不用再缩短了,谢谢大家!我会让它保持原样!谢谢你的解释(真是一个很好的解释)!我没有意识到这对帮助是有帮助的。我还认为使用**kwargs或*args对于新手理解代码来说是一个小把戏,所以我还是顺其自然吧。
    class World(object):

        def __init__(self, grid_size=(GRID_WIDTH, GRID_HEIGHT),
                     cell_size=(CELL_WIDTH, CELL_HEIGHT),
                     obstacles_position= OBSTACLES,
                     recharge_position= RECHARGE_ZONE,
                     treadmill_position= TREADMILL_ZONE,
                     workers_positions= WORKERS_POS,
                     delivery_positions= DELIVERY_ZONE):
         # some code bellow
    def main():
       # init some libraries
       world = worldGrid()
       # Do a while loop with the input variables from the world class

    if __name__ = '__main__':
       main()