在python2中分为
经典类:
class Box:
pass
新式类:
class Box(object):
pass
在python3中,只有新式类:
class Box:
pass
在python的class中的,self到底是什么?
上实例:
class.py
1 class Box: 2 def __init__(self, boxname, size, color): 3 self.boxname = boxname 4 self.size = size 5 self.color = color # self就是用于存储对象属性的集合,就算没有属性self也是必备的 6 7 def open(self, myself): 8 print(‘-->用自己的myself,打开那个%s,%s的%s‘ % (myself.color, myself.size, myself.boxname)) 9 print(‘-->用类自己的self,打开那个%s,%s的%s‘ % (myself.color, myself.size, myself.boxname)) 10 11 def close(self): 12 print(‘-->关闭%s,谢谢‘ % self.boxname) 13 14 15 b = Box(‘魔盒‘, ‘14m‘, ‘红色‘) 16 b.close() 17 b.open(b) # 本来就会自动传一个self,现在传入b,就会让open多得到一个实例对象本身,print看看是什么。 18 print(b.__dict__) # 这里返回的就是self本身,self存储属性,没有动作。
以上代码当中:
self 就是 对象/实例 属性的集合,
他们之间的关系如下:
1、Box是个类 ——》实例化——》b 对象/实例
2、Box类python中显示为:<class ‘__main__.Box‘> (接下一行)
——》实例化:b=Box(‘魔盒‘, ‘14m‘, ‘红色‘) (接下一行)
——》得到对象/实例b,显示为<__main__.Box object at 0x00000233857AA518>
3、抽象体 (接下一行)
——》实例的过程 (接下一行)
——》得对对象,含有属性:{‘boxname‘: ‘魔盒‘, ‘size‘: ‘14m‘, ‘color‘: ‘红色‘},即self。
self看似是一整个对象,实际上描述明白一个类就是生产对象的过程,描述了self就是得到了对象。所以self内的健值可以直接使用。
正如自然界中,一个有效的对象,必须包括:1、描述对象的属性;2、对象的方法。
所以self是必须的,也是对象中重要的特性。
当掌握了这个原理以后,我们试试以下的代码,感觉更加神奇。让我们明白重要的是它的思路:
class02.py
class Box: def myInit(mySelf, boxname, size, color): mySelf.boxname = boxname mySelf.size = size mySelf.color = color # 自己写一个初始化函数,一样奏效,甚至不用self命名。其它函数当中用标准self return mySelf # 返回给实例化过程一个对象!神奇!并且含有对象属性/字典 # def __init__(self, boxname, size, color): # self.boxname = boxname # self.size = size # self.color = color #注释掉原来标准的初始化 def open(self, myself): print(self) print(‘-->用自己的myself,打开那个%s,%s的%s‘ % (myself.color, myself.size, myself.boxname)) print(‘-->用类自己的self,打开那个%s,%s的%s‘ % (myself.color, myself.size, myself.boxname)) def close(self): print(‘-->关闭%s,谢谢‘ % self.boxname) # 经过改造,运行结果和标准初始化没区别 b = Box().myInit(‘魔盒‘, ‘14m‘, ‘红色‘) # b = Box(‘魔盒‘, ‘14m‘, ‘红色‘)#注释掉原来标准的初始化方法 b.close() b.open(b) # 本来就会自动传一个self,现在传入b,就会让open多得到一个实例对象本身,print看看是什么。 print(b.__dict__) # 这里返回的就是self本身,self存储属性,没有动作。