我希望用户能够通过向其传递参数来启动一个类,如果他没有传递它,那么它应该由类自动创建。这通常是如何在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()
或我?
答案 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
如果您希望此默认值为可变对象,则必须特别注意;这可能会导致不必要的行为,因为对象只会创建一次,然后发生变异。