我有一个要求,即所有内容都在脚本上。没有配置文件。现在我想用~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,....)
答案 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)