|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
OOA:面向对象分析
OOP:面向对象编程
OOD:面向对象设计
self是什么?
python的self相当于C++的this指针
类是图纸,类实例化后的对象才是能住人的房子
同样的图纸可以建造出很多房子,这些房子长得都差不多,但是它们都有不同的主人,self就相当于每个房子的牌号。
python的self是同一个道理,由同一个类可以生成无数个对象,这些对象都很相似,因为它们都来源于同一个类的属性和方法,当一个对象的方法被调用的时候,对象会将自身作为第一个参数传给self这个参数,接受到self的时候python就知道是哪一个对象在调用方法了
>>> a=Ball()
>>> a.setname('Ball A')
>>> b=Ball()
>>> b.setname('Ball B')
>>> c=Ball()
>>> c.setname('potato')
>>> a.kick()
我叫Ball A,该死的,谁踢我。。。
>>> c.kick()
我叫potato,该死的,谁踢我。。。
你听说过python的魔法方法吗?
据说,python的对象天生拥有一些神奇的方法,他们是面向对象的python的一切。他们是可以给你的对象增加魔力的方法。如果你的对象实现了这些方法中的某一个,那么这个方法就会在特殊情况下被python所调用,而这一切都是自动发生的…….
Python 的这些方法都会被双下划线所包围
1 __init__(self) ---构造方法
魔力在于,在对象实例化的时候,init方法就会在对象被创建的时候自动被调用。
实例化对象的时候可以传入参数,这些参数会自动的出入init方法中
>>> class Ball:
def __init__(self,name):
self.name=name
def kick(self):
print("我叫%s,该死的,谁踢我。。。"% self.name)
>>> b=Ball('potato')
>>> b.kick()
我叫potato,该死的,谁踢我。。。
>>> c=Ball() #如果不设置默认参数,无参数输入会报错,所以在类的方法中先设置默认参数。
Traceback (most recent call last):
File "<pyshell#52>", line 1, in <module>
c=Ball()
TypeError: __init__() missing 1 required positional argument: 'name'
2公有和私有
>>> p=Person()
>>> p.name
'turtle'
此处通过‘.’来访问对象的一个属性
为了实现对象的私有特征,python中有一个name mangling技术(名字改编,名字重整)。在python中定义私有变量只需要在变量名或函数名前加上“__”两个下划线,那么这个函数或变量就会为私有的了。
>>> class Person:
__name='turtle'
>>> p= Person()
>>> p.__name
Traceback (most recent call last):
File "<pyshell#61>", line 1, in <module>
p.__name
AttributeError: 'Person' object has no attribute '__name'
>>> p.name
Traceback (most recent call last):
File "<pyshell#62>", line 1, in <module>
p.name
AttributeError: 'Person' object has no attribute 'name'
__name 在外部就不能被访问了,只能在内部被访问。
>>> class Person:
__name='turtle'
def getname(self):
return self.__name
>>> p=Person()
>>> p.getname()
'turtle'
实际上python的name mangling就是将__变量名 自动改编为_类名__变量名 (伪私有)
>>> p._Person__name
'turtle'
|
评分
-
查看全部评分
|