Python类:可选参数

时间:2018-06-07 06:33:35

标签: python class optional-arguments

我希望用户能够通过向其传递参数来启动一个类,如果他没有传递它,那么它应该由类自动创建。这通常是如何在Python中完成的?例如:

class MyClass(object):

    def __init__(self, argument):

        self.argm = argument
        # logic here: if user does not pass argument
        # run some function or do something


    def create_argm(self):

        self.argm = 'some_value'



object_example = MyClass()
print(object_example.argm) # will print 'some_value'

object_example = MyClass('some_other_value')
print(object_example) # will print 'some_other_value'

编辑:self.argm将是python-docx Object,所以我无法def __init__(self, argument = Document()或我?

2 个答案:

答案 0 :(得分:3)

如果你不能在函数定义中创建值,你可以使用一个什么都没有的值,幸运的是python有None所以你可以这样做:

class MyClass(object):
    def __init__(self, argument=None):
        if argument is None:
            self.argm = self.create_argm()
        else:
            self.argm = argument

    def create_argm(self):
        return 'some_value'

如果None不合适,因为你希望它是argument的有效值,而不假设它被遗漏了,你总是可以创建一个虚拟值:

class MyNone:
    pass

class MyClass(object):
    def __init__(self, argument=MyNone):
        if argument is MyNone:
            self.argm = self.create_argm()
        else:
            self.argm = argument

    def create_argm(self):
        return 'some_value'

答案 1 :(得分:2)

这通常使用分配给关键字参数的默认值来完成:

class MyClass(object):

    def __init__(self, argument='default value'):
        self.argm = argument

如果您希望此默认值为可变对象,则必须特别注意;这可能会导致不必要的行为,因为对象只会创建一次,然后发生变异。