版权声明:转载请注明出处 https://blog.csdn.net/nanhuaibeian/article/details/86622145
- self
同一个类可以生成无数个对象,当一个对象的方法被调用时,对象会将自身的引用作为第一个参数传给该方法,python便知道需要操作谁
如果将类比作图纸,那么由类实例化后的对象为可以住的房子。根据一张图纸可以设计出成千上万的房子,但是每个房子都有自己的主人。这里的self就相当于每个房子的门牌号,有了self就可以轻松知道自己的房子。
class Ball:
def setName(self, name):
self.name = name
def kick(self):
print('我叫 %s ,少林足球传承人' % self.name)
a = Ball()
a.setName('飞轮镖')
b = Ball()
b.setName('回旋镖')
a.kick() #返回结果:我叫 飞轮镖 ,少林足球传承人
b.kick() #返回结果:我叫 回旋镖 ,少林足球传承人
- “ _ _init _ _( )”
_ _ init _ _()是Python里面的构造方法,只要实例化一个对象,这个方法就会在对象被创建时自动调用
class Potato:
def __init__(self, name):
self.name = name
def kick(self):
print("我叫 %s ,蔬菜里的大头" % self.name)
p = Potato('土豆')
- 公有和私有
对于Python,默认上对象的属性和方法都是公开的,可以直接通过操作符(.)进行访问
class Person:
name = '小明'
p = Person()
p.name
为了实现类似私有变量的特征,Python内容采用了一种叫name mangling(名字改编)的技术, 在python中定义私有变量只需要在变量名或者函数名前加"__"两个下划线
class Person:
__name = "test"
p = Person()
p.__name
#返回结果:
Traceback (most recent call last):
File "<input>", line 1, in <module>
AttributeError: 'Person' object has no attribute '__name'
此时要想实现访问只能从内部进行访问
class Person:
def __init__(self, name):
self.__name = name
def getName(self):
return self.__name
p = Person('小明')
p.getName() #返回结果:小明
python目前的私有机制都是伪机制,在外部可以通过“_类名__变量名”既可以访问双下横线开头的私有变量
p._Person__name