python中类的神秘面纱

看完篇你就可以飘起来了

一:实例化过程:

实例化:其实就是以People类为模版,在内存里开辟一块空间,存上数据,赋值成一个变量名

class People(object):

    def __init__(self, name, sex='F'):
        self.name = name
        self.sex = sex

    def people_name(self):
        print('我的名字叫:', self.name)


people = People('范冰冰')  # 实例化这个类,此时的people就是类People的实例化对象
people.people_name()

看完以上代码回答三个问题:

   1.为什么有__init__  ????

   2.__init__(self)里面为什么有self   ????

   3.__init__(self):中self.name=name,这个self做什么    ????

   4.方法def people_name(self):中self做什么    ????

静静的看完下面的内容,你就回明白了~~

实例化的过程:

其实self,就是实例本身(这里的self其实就是people)!你实例化时python会自动把这个实例本身通过self参数传进去。

所以:

初始化一个角色,就需要调用这个类一次:

people1 = People('范冰冰'),生成一个个体,会自动把参数传给People下面的__init__(...)方法

people2 = People('李晨')

虽然我们没有显性的去调用__init__传值,其实类在调用他自己的__init__(…)时,自己帮你给self参数赋值了, 

比如:

程序执行people1 = People('范冰冰')时,python的解释器其实干了两件事(回到上面的图片解说):

  1. 在内存中开辟一块空间指向people1这个变量名
  2. 调用People这个类并执行其中的__init__(…)方法,相当于People.__init__(people1,'范冰冰','F'),这样就把('范冰冰','F')跟people1关联起来,既然关联起来了,那么我们当然可以用prople1.name,prople1.sex的方式调用了。所以,为实现这种关联,在调用__init__方法时,就必须把r1这个变量也传进去,否则__init__不知道要把那3个参数跟谁关联呀。
  3. 所以这个__init__(…)方法里的,self.name = name , self.sex= sex就是要把这几个值 存到prople1的内存空间里

那么:

people_name(self)方法 为什么也还需要self参数么? 不是在初始化角色的时候 ,就已经把角色的属性跟prople1绑定好了么?

people = People('范冰冰') 
people.people_name() #等价于:People.people_name(people,”范冰冰")

细心的同学可能发现,我们在调用方法 people_name(self):时,并没有给self传值,假装不存在,不过Python还是会自动的帮你把people赋值给self这个参数,所以啊,你在 people_name(self)方法里面可以随意访问people其他属性(如:self.name,其实就是是等价于people.name方式去调用)

最后:

  1. “实例化”, 就是把一个虚拟的抽象的类,通过这个动作,变成了一个具体的对象了, 这个对象就叫做实例
  2. 刚才定义的这个类体现了面向对象的第一个基本特性,封装,其实就是使用构造方法将内容封装到某个具体对象中,然后通过对象直接或者self间接获取被封装的内容
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值