Skip to main content
 首页 » 编程设计

python之在 Python 的 __init__ 中使用 *args 和 **kwargs 的语法错误

2025年05月04日24shangdawei

我正在尝试定义一个 RecurringInterval 类,它通过组合使用 dateutil.rrule 中的 rrule 类,此外还有属性 period 默认为 None。我试过以这种方式初始化它:

class RecurringInterval(object): 
    def __init__(self, *args, period=None, **kwargs): 
        self.period = period 
        self.rrule = dateutil.rrule.rrule(*args, **kwargs) 
 
recurring_interval = RecurringInterval(dateutil.rrule.DAILY, count=1) 

但是,我得到一个SyntaxError:

  File "/home/kurt/dev/scratch/Furion_scheduler/recurring_interval.py", line 7 
    def __init__(self, *args, period=None, **kwargs): 
                                   ^ 
SyntaxError: invalid syntax 

据我所知,位置参数应该出现在关键字参数之前,所以这就是我所期望的语法;我将如何纠正它? (来自 https://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists 我还不清楚)。

我尝试将 period=None 向前推进,如下所示:

class RecurringInterval(object): 
    def __init__(self, period=None, *args, **kwargs): 
        self.period = period 
        self.rrule = dateutil.rrule.rrule(*args, **kwargs) 

但这会产生一个TypeError:

Traceback (most recent call last): 
  File "/home/kurt/dev/scratch/Furion_scheduler/recurring_interval.py", line 9, in <module> 
    recurring_interval = RecurringInterval(dateutil.rrule.DAILY, count=1) 
  File "/home/kurt/dev/scratch/Furion_scheduler/recurring_interval.py", line 7, in __init__ 
    self.rrule = dateutil.rrule.rrule(*args, **kwargs) 
TypeError: __init__() takes at least 2 arguments (2 given) 

如何以预期的方式初始化 RecurringInterval?

请您参考如下方法:

应该是:

def __init__(self, period=None, *args, **kwargs):