如何在初始化期间将多个参数传递给类

Dav*_*e A 5 python

我有一个要求,所有东西都在脚本上.没有配置文件.现在我想用~30多个参数初始化一个类.所有对象都将具有不同的参数值.

无法弄清楚最好的方法.

class doWorkWithItems():
    def __init__(self, dueX,dueY,dueZ,..):
        self.dueX = dueX
        ....
    def func1(self):
        work with above variables till object destroy.
worker1=doWorkWithItems(divX,divY,divZ,....)
Run Code Online (Sandbox Code Playgroud)

Sup*_*Man 16

首先,你误解了Python中的类声明.

这一行:

class doWorkWithItems(dueX,dueY,dueZ,...):
Run Code Online (Sandbox Code Playgroud)

应该在括号中继承class/es.即.class doWorkWithItems(object)class doWorkWithItems(str).所以你的新类试图继承你传递它的所有对象.

当您想要传递初始化参数时,您只需要在__init__函数内传递它们.

class doWorkWithItems(object):
    def __init__(self, dueX,dueY,dueZ,..):
Run Code Online (Sandbox Code Playgroud)

至于拥有一长串参数的最佳方法,Python有一个运算符,就是这样*.它解压缩了一系列物品.它通常与名称一起使用,args并允许传入任意数量的参数.

    def __init__(self, *args):
        self.args = args
Run Code Online (Sandbox Code Playgroud)

但是,将这些值存储为字典(如果它们用于不同的用途)可能是一个好主意,因为这比普通列表更容易访问.*args如果将每个参数作为2元素元组传递,则可以非常轻松地将其转换为字典:

    def __init__(self, *args):
        try:
             self.args = dict(args)
        except TypeError:
             #What to do if invalid parameters are passed

    ...

    obj = doWorkWithItems( ("Name", "John"), ("Age", 45), ("Occupation", "Professional Example"), )
    obj.args
    >>> {'Age': 45, 'Name': 'John', 'Occupation': 'Professional Example'}
Run Code Online (Sandbox Code Playgroud)

但是,如果在字典中传递参数,则可以采用更好的方法:

    def __init__(self, params):
        self.name = params.get('name')
        self.age = params.get('age')
        self.occupation = params.get('occupation')
Run Code Online (Sandbox Code Playgroud)

.get方法将从字典中返回一个键,但如果没有找到键,它将返回None.这样,即使它们未在参数中指定,也可以创建所有类的变量,它们将被设置为None.您不需要通过字典访问所有属性,只要您传递字典,它就会处理错误.


luo*_*luo 0

class doWorkWithItems(object):
    def __init__(self, dueX,dueY,dueZ,..):
        self.dueX = dueX
        ....
    def func1(self):
        work with above variables till object destroy.
worker1=doWorkWithItems(divX,divY,divZ,....)
Run Code Online (Sandbox Code Playgroud)

  • 请考虑编辑您的帖子,添加更多关于您的代码的作用以及为什么它可以解决问题的解释。大多数只包含代码(即使它有效)的答案通常不会帮助OP理解他们的问题。 (3认同)