self是什么?
Python的self其实就相当于C++的this指针。由同一个类可以生产无数对象,当一个对象的方法被调用的时候,对象会将自身的引用作为第一个参数传给该方法,那么python就知道需要操作哪个对象的方法了。
1 >>> class Ball: 2 def setName(self,name): 3 self.name = name 4 def kick(self): 5 print('我叫%s,该死的,谁踢我。。。' % self.name) 6 7 8 >>> a = Ball() 9 10 >>> a.setName('球A') 11 >>> b = Ball() 12 13 >>> b.setName('球B') 14 15 >>> a.kick() 16 我叫球A,该死的,谁踢我。。。 17 >>> b.kick() 18 我叫球B,该死的,谁踢我。。。
你听说过Python的魔法方法吗?
python的这些具有魔法的方法,总是被双下划线所包围,例如__init__(),即构造方法,也称构造函数,这个方法会在对象被创建时自动调用。其实,实例化对象时是可以传入参数的,这些参数会自动传入__init__()方法中,可以通过重写这个方法来自定义对象的初始化操作
实例:
1 >>> class Ball(): 2 def __init__(self,name): 3 self.name = name 4 def kick(self): 5 print('我叫%s,该死的,谁踢我。。。' % self.name) 6 7 8 >>> b = Ball('小土豆') 9 >>> b.kick() 10 我叫小土豆,该死的,谁踢我。。。
公有和私有?python内部采用了一种叫 name mangling(名字改编)的技术
默认上对象的属性和方法都是公开的,可以直接通过点操作符(.)进行访问:
1 >>> class Person: 2 name = '亦我飞也' 3 4 5 >>> p = Person() 6 >>> p.name 7 '亦我飞也'
为了实现定义私有变量,只需要在变量名或函数名前加上"__"两个下划线,那么这个函数或变量就会变成私有的了:
私有变量不可以直接由外部访问
1 >>> class Person: 2 __name = '亦我飞也' 3 4 5 >>> p = Person() 6 >>> p.__name 7 Traceback (most recent call last): 8 File "<pyshell#65>", line 1, in <module> 9 p.__name 10 AttributeError: 'Person' object has no attribute '__name'
室友变量可以由内部(内部函数)进行访问
1 >>> class Person: 2 __name = '亦我飞也' 3 def getName(self): 4 return self.__name 5 6 7 >>> p = Person() 8 >>> p.__name 9 Traceback (most recent call last): 10 File "<pyshell#72>", line 1, in <module> 11 p.__name 12 AttributeError: 'Person' object has no attribute '__name' 13 >>> p.getName() 14 '亦我飞也'
其实,name mangling(名字改编)技术,只是把双下划线开头的变量进行了改名而已。实际上在外部使用“_类名__变量名“即可访问双下划线开头的私有变量了:
1 >>> p._Person__name 2 '亦我飞也'标签:__,.__,name,Python,self,Person,面向对象编程,037,kick From: https://www.cnblogs.com/ybqjymy/p/17650542.html