super和self

     

         很多人会想当然的认为super self 类似,应该是指向父类的指针吧!。这是很普遍的一个误区。其实 super 是一个 Magic Keyword 它本质是一个编译器标示符,和 self 是指向的同一个消息接受者!他们两个的不同点在于:super 会告诉编译器,调用 class 这个方法时,要去父类的方法,而不是本类里的。

     

     当使用 self 调用方法时,会从当前类的方法列表中开始找,如果没有,就从父类中再找;而当使用 super 时,则从父类的方法列表中开始找。然后调用父类的这个方法。

 


     看到有人说点语法的坏处,建议在构造方法中使用 _iVar,不使用 self.iVar,理由如下:

     点语法( self.iVar )的坏处就是子类有可能覆写 setter,如果父类构造方法中使用了点语法给实例变量赋值,

     而子类又重写了那个setter,那么在调用父类的构造方法时,调用的就会是子类的setter,而不是父类的。     

     #pragma mark: 对于上述理由,没看懂,所以我个人觉得 在构造方法中使用点语法没什么坏处,既然子类覆写了 setter,

            那就肯定是希望调用子类覆写后的方法。


        

在Python中,继承是一个强大的概念,它允许一个类继承另一个类的属性方法。在继承过程中,我们通常会使用`self``super`来引用父类的属性方法。 首先,`self`是一个特殊的参数,它表示当前类的一个实例对象。在类的方法中,我们通常会将`self`作为第一个参数来引用该实例对象。通过`self`,我们可以访问该实例对象的属性调用其方法。 当一个类继承另一个类时,我们可以使用`super()`函数来调用父类的方法。通过`super()`,我们可以在子类中直接调用父类的方法,而不需要明确指定父类的名称。这样做可以简化代码,提高代码的可读性可维护性。 在使用`super()`时,我们需要注意以下几点: 1. 在子类的方法中,调用父类的方法时,需要使用`super().父类方法名()`的形式。这样可以确保调用的是父类的方法,而不是子类重写的方法。 2. `super()`是根据方法解析顺序(Method Resolution Order,简称MRO)来确定调用的父类方法的顺序。MRO是一个算法,用于确定继承关系中的方法调用顺序。 3. 如果需要在`super()`调用父类方法时传递额外的参数,可以在`super()`后面使用圆括号来传递参数,例如`super().__init__(参数1, 参数2)`。 综上所述,`self`是用于引用类的实例对象,可以访问其属性调用其方法;`super()`是用于调用父类的方法,可以简化代码并提高可读性可维护性。这些特性使得Python的继承机制变得灵活强大,可以帮助我们更好地组织重用代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值