python中的self

在方法中的定义中为什么需要包含形参self呐?Python通过调用__init__()方法来创建一个类的实例时,将自动传入实参self,每个与类相关联的方法
调用都自动传递实参self,他是一个指向实例本身的引用,让实例能够访问类中的属性和方法。
读懂上面对self的定义,也就能懂得self的用途,但是这句话并没有很好的回答方法定义必须要包含形参self,这个问题我是这样理解的。

在python中,或者在很多面向对象的语言中,属性可分为:类属性,实例属性,私有属性。方法可分为:普通方法,静态方法,类方法。
我们先编一段代码,看看代码怎么说?

class Chair():
    color="red"

    def __init__(self,chair_id,__flaw):
        self.chair_id=chair_id
        self.__flaw = __flaw
    def swivel(self):
        print(self.chair_id+" is swiveling")

    @staticmethod
    def stand():
        print("standing")

    @classmethod
    def print_color(cls):
        print("color is "+cls.color)

    def show(self):
        print(self.chair_id+"'color is "+Chair.color+ "flaw is " +self.__flaw)

if __name__ == "__main__":
    chair = Chair("1123","True")
    chair.swivel()
    chair.show()
    Chair.stand()
    Chair.print_color()
    print(Chair.color)
    print(chair.chair_id)
    print(chair.__flaw)

     在我们创建的这个类中,我们定义了私有属性,实例属性,类属性;方法有普通方法,静态方法和类方法。
为什么需要self呐?那不如就去掉self,然后,在swivel方法中,我们就找不到chair_id了,因为每个方法块
都有自己的定义域,在方法内部定义的变量,在其他方法中我们是看不到的,那么,找不到
实例的数据,方法还有何用呐?聪明的你会发现,我可以调用类属性呀?那当然是可以,如果那样可以
的话,就再也定制不了特别的椅子了!所以self的存在很有必要,
就如信使,它能够让普通方法访问到实例的属性。如果学过java可能就会有所了解了,
你不用关键字,就要用其他的办法来实现同样的功能。编程语言不是想设计就设计的,其中
要考虑的事情是真的很多。
当然这里self仅仅是一个形参,你换成s,或者更熟悉的this,任何名字,程序都是正常运行的,本质都是self。
这样看,python设计角度来看语言的一些特质就能更好的理解语法特性了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值