|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
小甲鱼老师在讲解类的课程里介绍了构造函数__init__(),我的困惑如下:
1. 构造函数是不是就是定制类的方式?
2. 为什么__init__()叫做定制函数,而非叫做定制类?它应用于在类的创建函数中,又不是应用于在函数的创建中啊
3. 如果是调用到了已经被绑定的父类方法会发生什么事情?
4. Super()函数是super().__init__(),为什么这里面却上不用传入self语句了?
麻烦各位大侠帮忙指点一下,谢谢!
下面我将逐一回答你的问题,希望能帮助你更好地理解这些概念。
1. 构造函数是不是就是定制类的方式?
不完全是。构造函数(在Python中通常指的是__init__方法)是类实例化时自动调用的特殊方法,用于初始化新创建的对象。它确实允许你在创建对象时“定制”或“设置”对象的初始状态,但它本身并不等同于“定制类”的全部方式。定制类还包括定义类的属性、方法(包括特殊方法如__str__、__repr__等)、以及类的继承关系等。
2. 为什么__init__()叫做定制函数,而非叫做定制类?
__init__方法被称为“初始化”方法或“构造器”更为准确,而“定制函数”这个称呼可能是对其作用的一种非严格或口语化的描述。__init__方法是在类的实例(对象)被创建时自动调用的,用于设置对象的初始状态,而非在类本身被定义时调用。因此,它更多地与对象(实例)的创建和初始化相关,而不是类的定义或“定制”。
3. 如果是调用到了已经被绑定的父类方法会发生什么事情?
当你在子类中调用一个已经被父类定义并可能已被重写(或称为覆盖、遮蔽)的方法时,实际调用的版本取决于当前的调用环境(即方法是在哪个类的实例上被调用的)。如果子类没有重写该方法,那么调用的是父类的版本。如果子类重写了该方法,那么调用的是子类中定义的版本,除非显式地通过super()函数或其他方式调用了父类的版本。
4. Super()函数是super().__init__(),为什么这里面却不用传入self语句了?
在Python中,super()函数返回了一个代表父类(或兄弟类)的临时对象,该对象允许你调用父类(或兄弟类,取决于继承的复杂性)中的方法。当你使用super().__init__()时,你实际上是在调用父类的__init__方法。这里的self参数不需要显式传递,因为在类的方法内部(包括通过super()调用的方法),self已经是一个隐式参数,代表当前类的实例。当你调用super().__init__()时,Python会自动将当前实例(即self)作为第一个参数传递给父类的__init__方法。
简而言之,self不需要在调用super().__init__()时显式传递,因为它已经被Python自动处理了。
|
|