2014-09-27 21 views
-2

我在python中调用一个类与许多可选参数。我这样构造构造函数的原因是因为我想有两种可能性来创建员工对象的实例。Python构造函数与许多可选参数

def __init__(self, ssn=None, familyssn=None, first_name=None, last_name=None, middle_name=None, email=None, mobile_phone=None, phone=None, department=None, salary=None, employee_list=None): 
    self.employee_list = employee_list or [] 

    dict_of_emp = {} 
    list_of_emp = [] 
    self.ssn = ssn 
    self.familyssn = familyssn 
    self.first_name = first_name 
    self.last_name = last_name 
    self.middle_name = middle_name 
    self.email = email 
    self.mobile_phone = mobile_phone 
    self.phone = phone 
    self.department = department 
    self.salary = salary 

    list_of_emp.append(ssn) 
    list_of_emp.append(familyssn) 
    list_of_emp.append(first_name) 
    list_of_emp.append(last_name) 
    list_of_emp.append(middle_name) 
    list_of_emp.append(email) 
    list_of_emp.append(mobile_phone) 
    list_of_emp.append(phone) 
    list_of_emp.append(department) 
    list_of_emp.append(salary) 

    #print "listi i smid: ", list_of_emp 
    Employee.empCount += 1 

    print "loop through list in constructor: ", employee_list 

这是调用构造函数的唯一方法吗?

emp = Employee(None, None, None, None, None, None, None, None, None, None, list_of_list_emp_to_register) 

我觉得它相当丑陋的语法!

+2

不,你并不需要所有的'None's。你应该注意关于[keyword arguments]的文档(https://docs.python.org/2/tutorial/controlflow.html#keyword-arguments)。另外,什么是'list_of_list_emp_to_register'? – 2014-09-27 21:30:23

+0

您也可以将您最后一次选择的'employee = None'更改为'employee = []',尽管可能会有一些惊愕与... – Makoto 2014-09-27 21:52:10

回答

0

不可以。选项,如您所说可选。因此Employee()等同于填写所有的None。这是ssn=None

点到指定的最后一个参数简单地说

emp = Employee(employee_list=list_of_list_emp_to_register) 
+0

这正是我正在寻找的,谢谢。 – JonB 2014-09-27 21:53:06