Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中初始化默认参数_Python_Oop - Fatal编程技术网

在python中初始化默认参数

在python中初始化默认参数,python,oop,Python,Oop,如果我创建一个名为Car的类 class Car(): '''car information summary''' def __init__(self, make, model, year): self.make = make self.model = model self.year = year self.odometer = 0 我了解到,self.odometer=0允许我创建一个新实例,而无需输入里程表的值

如果我创建一个名为Car的类

class Car():
    '''car information summary'''
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        self.odometer = 0
我了解到,
self.odometer=0
允许我创建一个新实例,而无需输入里程表的值。每个新实例都将以0处的里程表读数开始

但是,如果我想创建一个具有指定里程表读数的新实例,该怎么办

car_1 = Car('Audi', 'S4', '2017', 5000)
它不允许我这样做。我想做的是把它当作一个函数的默认值来使用:你不必给出一个值,因为有一个默认值,但是当你这样做的时候,你可以覆盖默认值

我知道我可以在以后修改属性,或者编写一个方法来更改属性。但这不是我现在关心的问题


对于OOP来说,这是一个错误的想法吗?

Python支持的概念是。您可以编写一个参数,如果未指定,则为其指定一个默认值。在这种情况下,它看起来像:

class Car():
    '''car information summary'''

    def __init__(self, make, model, year, odometer=0):
        self.make = make
        self.model = model
        self.year = year
        self.odometer = odometer
然后Python将只计算一次
[]
。每次不为
x
提供值时,您将获得对同一列表的引用(而不是每次新列表)

因此,使用可变类型通常是危险的(一个
int
不是可变类型,所以我们对
里程表=0
是安全的)

例如,如果我们在
f()
的结果中附加(3),那么从现在开始,
f()
将返回该列表(
[3]
)。这通常不是预期的效果。如果使用可变对象,某些IDE会发出警告

如果每次未提供
x
时都需要一个新的空列表,则常见模式为:

def f(x=None):
    if x is None:
        x = []
    return x
def(x=None):
如果x为无:
x=[]

return x
Python支持。您可以编写一个参数,如果未指定,则为其指定一个默认值。在这种情况下,它看起来像:

class Car():
    '''car information summary'''

    def __init__(self, make, model, year, odometer=0):
        self.make = make
        self.model = model
        self.year = year
        self.odometer = odometer
然后Python将只计算一次
[]
。每次不为
x
提供值时,您将获得对同一列表的引用(而不是每次新列表)

因此,使用可变类型通常是危险的(一个
int
不是可变类型,所以我们对
里程表=0
是安全的)

例如,如果我们在
f()
的结果中附加(3),那么从现在开始,
f()
将返回该列表(
[3]
)。这通常不是预期的效果。如果使用可变对象,某些IDE会发出警告

如果每次未提供
x
时都需要一个新的空列表,则常见模式为:

def f(x=None):
    if x is None:
        x = []
    return x
def(x=None):
如果x为无:
x=[]

return x
明白了!!谢谢你能举例说明最后一句话吗?我不知道这到底意味着什么,加油!!谢谢你能举例说明最后一句话吗?我不知道这到底意味着什么