我正在阅读“编程Python”,本书中创建类的一个示例如下:
class Person:
def __init__(self, name, age, pay=0, job=None):
self.name = name
self.age = age
self.pay = pay
self.job = job
我的问题是为什么将薪水设置为0并将工作设置为无,而不像名称和年龄那样设置为任何东西。这是因为它强制执行变量类型吗?或者仅仅是为了只将姓名和年龄传递给班级?或其他事情。
答案 0 :(得分:2)
我认为他们只是想举例说明两种可能性:
它与强制执行变量类型没有任何关系。
答案 1 :(得分:1)
我认为这个例子试图表明你在初始化时正在定义一个抽象逻辑:在这种情况下,逻辑是任何人都有一个名字和一个年龄但不一定是工作和支付。 因此,每个新的班级成员都需要有一个姓名和年龄(因为没有初始值),但不需要薪水和工作。 此函数不强制执行变量类型! - 您基本上可以将任何类型放入这些变量中,实际上 - 在现实生活中,您可能希望在函数内使用这些类型之前进行某些类型检查。
答案 2 :(得分:1)
使用该类创建对象时,必须使用值name和age。但是薪水和工作不是强制性的,如果你没有在创建时指定它们,默认情况下它们将获得值0和无。
我希望这会有所帮助 阿尔瓦罗
答案 3 :(得分:1)
除了可能提供关于可选关键字参数的学习机会(可以通过说(name = value)传递,或者仅仅通过像其他参数一样使用它们),这个概念,特别是,用于最初可能对该方法的默认使用不重要的参数。
例如,使用Python 3+中的print
方法。通常,您只会以print(something)
的形式看到它。但它实际上可以用于打印其他东西;这是用于调试,它打印到stderr
,与标准输出不同,它通常不应被覆盖。在这种情况下,它将用作:print(something, file=stderr)
。通常,它将自己设置为默认的标准输出文件(这对于程序员每次指定指定打印而言都是麻烦),但可以指定。您在这里看到的是必须至少被调用的构造函数,例如Person("John", 27)
,但也可以被称为{{ 1}}。现在,Person("John", 27, 60, "Accountant")
为pay
,60
为job
。
了解详情:Python 3 Official Tutorial on Default Arguments
(Or the Python 2 version)