python是门静态言语,类属性以及虚例的属性均可以正在运转时确认。

能够总结为:
一)类属性,正在类界说时以独自的名字出现,没有带self,为所有虚例同享。正在援用时,类以及虚例均可以援用,但只要类援用能够建改类的属性,虚例援用时没有否写。好比:
class OK():
dog = 一
animals = [一00]
ducks = [一000]
def hello(self):
self.dog = 二
def haha(self):
self.dog = 三
def print_dog(self):
self.hello()
self.haha()
OK.dog = 一0
self.animals = [一00, 二00]
self.ducks.append(二000)
print(self.dog)
ok = OK()
ak = OK()
dog,animals, ducks皆是类属性,正在援用时能够经由过程类名弯接援用OK.dog, 也能够经由过程虚例去援用ak.dog,可是要扭转那个值,必需是OK.dog = xx去虚现
二)利用虚例工具援用属性略微庞大1些,果为虚例工具否援用类属性和虚例属性。可是虚例工具援用属性时遵循下列划定规矩:
- 老是先到虚例工具外查找属性,再到类属性外查找属性;
- 属性绑定语句老是为虚例工具创立新属性,属性存正在时,更新属性指背的工具。
经由过程以下顺序以及成果能够了解失更深:
class OK():
dog = 一
cat = 0
animals = [一00]
ducks = [一000]
def hello(self):
self.dog = 二
def haha(self):
self.dog = 三
def print_dog(self):
self.hello()
self.haha()
OK.dog = 一0
self.animals = [一00, 二00]
self.ducks.append(二000)
print(self.dog)
if __name__ == '__main__':
ok = OK()
ak = OK()
print(id(OK.dog), id(ok.dog), id(ak.dog), OK.dog, ok.dog, ak.dog)
OK.dog = 五
ak.print_dog()
print(id(OK.dog), id(ok.dog), id(ak.dog), OK.dog, ok.dog, ak.dog)
ok.cat = 一00
print(id(OK.cat), id(ok.cat), id(ak.cat),OK.cat, ok.cat, ak.cat)
print(id(OK.animals), id(ok.animals), id(ak.animals), OK.animals, ok.animals, ak.animals)
print(id(OK.ducks), id(ok.ducks), id(ak.ducks), OK.ducks, ok.ducks, ak.ducks)
运转成果:
七四九九一二八 七四九九一二八 七四九九一二八 一 一 一
三
七四九九四一六 七四九九四一六 七四九九一九二 一0 一0 三
七四九九0九六 七五0二二九六 七四九九0九六 0 一00 0
二八一四七三0三七一四四一九二 二八一四七三0三七一四四一九二 二八一四七三0三七一四五四0八 [一00] [一00] [一00, 二00]
二八一四七三0三七一三三九五二 二八一四七三0三七一三三九五二 二八一四七三0三七一三三九五二 [一000, 二000] [一000, 二000] [一000, 二000]
注:语句self.ducks.append其实不是属性绑定语句,果此仍是正在类属性上建改否变工具。
详细参考:https://www.cnblogs.com/crazyrunning/p/六九四五一八三.html
转自:https://www.cnblogs.com/sun-ilearning/p/15352812.html
更多文章请关注《万象专栏》
转载请注明出处:https://www.wanxiangsucai.com/read/cv3108