我有一个要求,所有东西都在脚本上.没有配置文件.现在我想用~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.您不需要通过字典访问所有属性,只要您传递字典,它就会处理错误.
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)