2828 >>> class Girl(object): #Python 3: class Girl:
2929 breast = 90
3030
31- 在真实世界中,breast就是Girl的属性,你到某度上去搜索一下有关的关键词,就发现breast是一个重要属性了。所以,如果要建立类` Girl ` ,它必须有` breast ` 属性。那么这个属性的值,就关系到某类Girl的颜值了。这里的类` Girl ` 都是` breast ` 为90的,也就是所有符合此类的girl,其breast都是90。 你可以想象其颜值高低了,是否符合你的喜好。
31+ 在真实世界中,breast就是Girl的属性,你到某度上去搜索一下有关的关键词,就发现breast是一个重要属性了。所以,如果要建立类` Girl ` ,它必须有` breast ` 属性。那么这个属性的值,就关系到某类Girl的颜值了。这里的类` Girl ` 都是` breast ` 为90的,你可以想象其颜值高低了,是否符合你的喜好。
3232
3333大招一出,为之一振,顿时困意消退。下面就请回到前面那个类` A ` ,继续枯燥地学习。
3434
7272 >>> Girl.__dict__
7373 mappingproxy({'breast': 40, '__weakref__': <attribute '__weakref__' of 'Girl' objects>, '__dict__': <attribute '__dict__' of 'Girl' objects>, '__module__': '__main__', '__doc__': None})
7474
75- 对于不同版本的Python,上述显示结果也有所差异。 但你都能看到属性的详细信息。类的特殊属性` __dict__ ` 所显示的是这个类的属性名称以及该属性的完整数据。
75+ 对于不同版本的Python,上述显示结果也有所差异, 但你都能看到属性的详细信息。类的特殊属性` __dict__ ` 所显示的是这个类的属性名称以及该属性的完整数据。
7676
7777下面列出类的几种特殊属性的含义,读者可以一一查看。
7878
118118 >>> Girl()
119119 <__main__.Girl object at 0x00000000035262E8>
120120
121- 但是,如果不将实例赋给某个变量,它就马上被Python视为垃圾回收了。只有把它赋给某个变量——实例也是对象——我们通过变量才能操作这个实例 。
121+ 而 ` canglaoshi = Girl() ` 本质上就是将变量 ` canglaoshi ` 与实例对象 ` Girl() ` 建立引用关系,这种关系同以前见过的赋值语句 ` a = 2 ` 是同样的效果 。
122122
123123那么,一个实例的建立过程是怎样进行的呢?
124124
@@ -275,7 +275,7 @@ foo.y就是新建的一个实例属性,它没有影响原来的实例属性foo
275275如果类中变量引用可变数据,情形会有所不同。因为可变数据能够进行原地修改。
276276
277277 >>> class B(object):
278- ... y = [1,2, 3]
278+ ... y = [1, 2, 3]
279279
280280这次定义的类中,变量引用的是一个可变对象。
281281
@@ -323,9 +323,9 @@ foo.y就是新建的一个实例属性,它没有影响原来的实例属性foo
323323
324324##` self ` 的作用
325325
326- 类里面的任何方法,第一个参数是self,但是在实例化的时候 ,似乎没有这个参数什么事儿(不显示地写出来),那么self是干什么的呢 ?
326+ 类里面的任何方法,第一个参数是self,但是在创建实例的时候 ,似乎没有这个参数什么事儿(不显示地写出来),那么 ` self ` 是干什么的呢 ?
327327
328- self是一个很神奇的参数 。
328+ ` self ` 是一个很神奇的参数 。
329329
330330将前文的` Person ` 类简化一下,
331331
@@ -346,7 +346,7 @@ self是一个很神奇的参数。
346346 <__main__.Person object at 0x0000000003146C50>
347347 <class '__main__.Person'>
348348
349- 这说明` self ` 就是实例,在看看刚刚建立的那个实例 。
349+ 这说明` self ` 就是类 ` Person ` 的实例,再看看刚刚建立的那个实例 ` girl ` 。
350350
351351 >>> girl
352352 <__ main__ .Person object at 0x0000000003146C50>
@@ -357,12 +357,12 @@ self是一个很神奇的参数。
357357
358358当创建实例的时候,实例变量作为第一个参数,被Python解释器悄悄地传给了` self ` ,所以我们说在初始化函数中的` self.name ` 就是实例的属性。
359359
360- 注意,` self.name ` 中的name和初始化函数的参数` name ` 没有任何关系,它们两个一样,只不过是一种起巧合(经常巧合,其实是为了省事和以后识别方便,故意让它们巧合。 ),或者说是写代码的人懒惰,不想另外取名字而已,无他。当然,如果写成` self.xxxooo = name ` ,也是可以的。
360+ 注意,` self.name ` 中的name和初始化函数的参数` name ` 没有任何关系,它们两个一样,只不过是一种起巧合(经常巧合,其实是为了省事和以后识别方便,故意让它们巧合),或者说是写代码的人懒惰,不想另外取名字而已,无他。当然,如果写成` self.xxxooo = name ` ,也是可以的。
361361
362362 >>> girl.name
363363 'canglaoshi'
364364
365- 所以,我们得到实例属性 ,但是,在类的外面不能这样用:
365+ 这是我们得到的实例属性 ,但是,在类的外面不能这样用:
366366
367367 >>> self.name
368368 Traceback (most recent call last):
@@ -372,7 +372,7 @@ self是一个很神奇的参数。
372372
373373##数据流转
374374
375- 只有将类实例化 ,通过实例来执行各种方法,应用实例的属性,才是最常见的现象 。
375+ 将类实例化 ,通过实例来执行各种方法,应用实例的属性,是最常见的操作 。
376376
377377所以,对此过程中的数据流转一定要弄明白。
378378
@@ -413,15 +413,15 @@ self是一个很神奇的参数。
413413
414414![ ] ( ./2images/20801.png )
415415
416- 创建实例` girl = Person('canglaoshi') ` ,注意观察图上的箭头方向。` girl ` 这个引用实例的变量传给了和类中的 ` self ` ,简单理解为:实例变量与self对应 ,实例变量主外,self主内。
416+ 创建实例` girl = Person('canglaoshi') ` ,注意观察图上的箭头方向。` girl ` 这个引用实例对象的变量传给了 ` self ` ,即 ` self ` 也引用了实例对象。简化理解为:self是实例(不求准确,只求表面现象) ,实例变量主外,self主内。
417417
418- ` "canglaoshi" ` 是一个具体的数据,通过初始化函数中的` name ` 参数,传给` self.name ` , 前面已经讲过,` self ` 也是一个实例 ,可以为它设置属性,` self.name ` 就是一个属性,经过初始化函数,这个属性的值由参数` name ` 传入,现在就是` "canglaoshi" ` 。
418+ ` "canglaoshi" ` 是一个具体的数据,通过初始化函数中的` name ` 参数,传给` self.name ` ——准确地说谁传了对象引用给实例的属性 ` name ` 。 前面已经讲过,` self ` 是一个实例 ,可以为它设置属性,` self.name ` 就是一个属性,经过初始化函数,这个属性的值由参数` name ` 传入,现在就是` "canglaoshi" ` 。
419419
420420在类` Person ` 的其它方法中,都是以` self ` 为第一个或者唯一一个参数。注意,在Python中,这个参数要显明写上,在类内部是不能省略的。这就表示所有方法都承接` self ` 实例对象,它的属性也被带到每个方法之中。例如在方法里面使用` self.name ` 即是调用前面已经确定的实例属性数据。当然,在方法中,还可以继续为实例` self ` 增加属性,比如` self.breast ` 。这样,通过` self ` 实例,就实现了数据在类内部的流转。
421421
422422如果要把数据从类里面传到外面,可以通过` return ` 语句实现。如上例子中所示的` getName ` 方法。
423423
424- 因为引用实例的变量 ` girl ` 和` self ` 是对应的,实际上 ,在类里面也可以用` girl ` 代替` self ` 。例如,做如下修改:
424+ 因为引用实例对象的变量 ` girl ` 和` self ` ,所以 ,在类里面也可以用` girl ` 代替` self ` 。例如,做如下修改:
425425
426426 #!/usr/bin/env python
427427 # coding=utf-8
@@ -442,7 +442,7 @@ self是一个很神奇的参数。
442442
443443 canglaoshi
444444
445- 这个例子说明,在实例化之后,实例变量 ` girl ` 传给个 ` self ` 。但是,提醒读者,千万不要用上面的修改了的那个方式。因为那样写使类没有独立性,这是大忌。
445+ 这个例子说明,在实例化之后,` girl ` 和 ` self ` 都引用了实例对象 。但是,提醒读者,千万不要用上面的修改了的那个方式。因为那样写使类没有独立性,这是大忌。
446446
447447------
448448
0 commit comments