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

时间:2015-08-14 08:41:59

标签: 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,....)

5 个答案:

答案 0 :(得分:16)

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

这一行:

class doWorkWithItems(dueX,dueY,dueZ,...):

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

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

class doWorkWithItems(object):
    def __init__(self, dueX,dueY,dueZ,..):

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

    def __init__(self, *args):
        self.args = args

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

    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'}

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

    def __init__(self, params):
        self.name = params.get('name')
        self.age = params.get('age')
        self.occupation = params.get('occupation')

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

答案 1 :(得分:2)

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,....)

如果你在类名后面加上括号,那就是它的继承。这些参数应该出现在你写的__init__()中。

答案 2 :(得分:2)

python中对象的初始化是使用构造函数方法完成的,该方法是:init方法,因此无论你传递什么参数来从该类中创建一个对象都将转向init方法。因此,只有那个方法应该有这些参数。这些不应与班级名称一起出现。
Python将其用于继承目的。有关继承的更多信息,请阅读this
对于更干净的代码,我建议使用*args and **kwargs

答案 3 :(得分: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,....)

答案 4 :(得分:0)

如果要使用在类中获取两个参数的函数。您可以使用我的简单代码:

class my_class:
  variable = "0"
  def function(self):
      print("sample function in class!!")
  a = 0
  b = 0
  def sum(self, a , b):
      print(a + b)

sample_object = my_class()

sample_object.sum(25,60)