老规矩,先上代码
class CC:
def setTT(self,x,y):
self.x = x
self.y = y
def printTT(self):
print(self.x , self.y)
输出如下:
cc = CC()
#可以使用__dict__查看对象拥有的属性:
cc.__dict__
{}
CC.__dict__
mappingproxy({'__module__': '__main__', 'setXY': <function CC.setXY at 0x000000FD096EC268>, 'printXY': <function CC.printXY at 0x000000FD0BFB21E0>, '__dict__': <attribute '__dict__' of 'CC' objects>, '__weakref__': <attribute '__weakref__' of 'CC' objects>, '__doc__': None})
#在上面可以看出__dict__属性由一个字典组成,字典中仅有实例对象的属性,不显示类属性和特殊属性,键表示的是属性名,值表示的属性对应的数据值。
cc.setTT(4,5)
cc.__dict__
{'x': 4, 'y': 5}
这儿说明了什么呢,此时的实例对象cc有两个新属性,而且这两个属性仅属于实例对象。
CC.__dict__
mappingproxy({'__module__': '__main__', 'setXY': <function CC.setXY at 0x000000FD096EC268>, 'printXY': <function CC.printXY at 0x000000FD0BFB21E0>, '__dict__': <attribute '__dict__' of 'CC' objects>, '__weakref__': <attribute '__weakref__' of 'CC' objects>, '__doc__': None})
为什么会这样呢?主要在于self参数,当实例对象cc去调用setTT方法的时候,他实际上传入的第一个参数是cc,
cc = setTT(cc,4,5),此时也就容易看出self.x= 4,self.y=6就相当于cc.x =4,cc.y=5