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