2012-05-19 50 views
-2

下面的代码,不知道我做错了什么。这是一个员工数据库。下面从Employee类继承。不知道该怎么做才能让它通过,除非我的代码是错误的。我得到这个错误“语法错误:非关键字ARG关键字ARG后”无法让文档测试通过python

class Manager(EmpSalaried): #inherits from EmpSalaried 
    def __init__(self, salary=0.0, firstName="", lastName="", ssID="", DOB=datetime.fromordinal(1), 
      startDate=datetime.today(), 
      manage=[]): #manage attribute added for manager 
     Employee.__init__(self, salary, firstName, lastName, ssID, DOB, startDate) 
     self.manage = manage 


    def __str__(self): 
     """ 
     >>> import datetime 
     >>> e = Manager(10, 'Bob', 'Quux', '123', startDate=datetime.datetime(2009, 1, 1),   
     ['Michael', 'Bob', 'Hello']) 
     >>> print e 
     10, Bob Quux, 123, 0001-01-01 00:00:00, 2009-01-01 00:00:00, Michael, Bob, Hello 
     >>> b = Manager(2000, 'Bob', 'Lol', '1234', startDate=datetime.datetime(2009, 1, 1),  
     ['Michael', 'Bob', 'Hello']) 
     >>> print b 
     2000, Bob Lol, 1234, 0001-01-01 00:00:00, 2009-01-01 00:00:00 

     """ 
     return Employee.__str__(self) + ', ' + str(self.manage) #need to convert to a string in order to add to string 
+1

什么是失败?错误在哪里? (当然,有很多问题需要了解,但是最好能够更好地解释你的问题,以显示你已经尝试过的方法。) –

+0

@ChrisMorgan我得到这个错误“SyntaxError:non-keyword arg关键字后arg“ – VPNTIME

回答

1

的doctests在,就像你运行一个交互式会话以同样的方式进行格式化。您可以运行交互式会话并将其复制并获得所有结果。这可能是一个有效的会话:

>>> import datetime 
>>> print Manager(10, 'Bob', 'Quux', '123', datetime.datetime(2009, 1, 1), 
... ['Michael', 'Bob', 'Hello']) 
10, Bob Quux, 123, 0001-01-01 00:00:00, 2009-01-01 00:00:00, Michael, Bob, Hello 
>>> print Manager(2000, 'Bob', 'Lol', '1234', datetime.datetime(2009, 1, 1),  
... ['Michael', 'Bob', 'Hello']) 
2000, Bob Lol, 1234, 0001-01-01 00:00:00, 2009-01-01 00:00:00 

在你所做的事情中存在各种语法错误;

  • 对于它的文档测试的一部分,如果你继续发言,下一行必须以... 启动(完全一样,在常会);
  • 您的Manager实例化无效(真正的Python SyntaxError),因为您有startDate=...(一个关键字参数),然后是非关键字参数(“manager”的值)。这是阻止其运行的主要问题。这也是例外告诉你的。

如果你不能在doctest中找出它,在一个正常的Python会话中运行它。在那里玩。

您的代码中还存在其他一些重要问题;这里有几个人:

  • EmpSalariedEmployee:与怎么办?
  • 由于使用可变默认参数,如果在创建Manager时未指定manage参数,则它们将获得相同的列表。这不是你想要的。