面向對象編程-類變量與實例變量

 1 class Role(object):#執行時以後就存在內存裏
 2     n='我是類裏的n' #類變量,保存在類的內存裏
 3     list=[]
 4     name='我是類裏的name'
 5     def __init__(self,name,role,weapon,life_value=100,money=15000):
 6         #構造函數
 7         #做用:在實例化時作一些類的初始化工做,開闢一塊內存
 8         self.name=name #實例變量(靜態屬性),做用域是實例自己,保存在實例的內存裏
 9         self.role=role
10         self.weapon=weapon
11         self.life_value=life_value
12         self.money=money
13 
14     def shot(self):#類的方法,功能(動態屬性)
15         print('%s is shooting...' % self.name)
16 
17     def got_shot(self):
18         print('%s is getting shot...' % self.name)
19 
20     def buy_gun(self,gun_name):
21         print('%s has bought %s' % (self.name,gun_name))
22 
23 print(Role.n,Role.name)
24 role1=Role('James','police','AWM') #實例化,生成一個對象
25 #調用role的同時也將role1傳進去了,類裏面函數自帶的self就是爲了傳實例名role1
26 #實際上實例化的過程是是這樣的:
27 #role1=Role(role1,'James','police','AWM')
28 #role1.name='James'
29 #role1.role='Police'
30 #role1.weapon='AWM'
31 #role1.shot()#其實是Role=shot(role1)
32 #role1.got_shot()#其實是Role=got_hot(role1)
33 #role1.buy_gun()#其實是Role=buy_gun(role1,gunnamme)
34 
35 #與調用函數不一樣
36 #調用函數,-》執行,-》返回結果
37 #role1=role.__init__() return 地址
38 
39 #更改,從新賦值
40 role1.name='Paul'
41 
42 #加新屬性
43 role1.bullet_proof=True
44 
45 #刪掉屬性
46 del role1.weapon
47 
48 print(role1.n,role1.name)#先在實例裏面找變量,再在類裏面找這個變量
49 role1.shot()
50 role1.got_shot()
51 role1.buy_gun('AK47')
52 role1.list.append('r1')
53 
54 role2=Role('Bronny','police','AWM')
55 role2.list.append('r2')
56 print(Role.list)
57 
58 role1.n='改類變量'#其實是在role1里加了一個n變量
59 print(role1.n)
60 print(role2.n)
61 print(Role.n)

結果:python

 

類變量的做用:你們共用的屬性app

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 # Author:James Tao
 4 
 5 #類變量:
 6 #做用:你們共用的屬性
 7 class Person:
 8     cn='中國'
 9     def __init__(self,name,age,addr,cn='China'):
10         self.name=name
11         self.age=age
12         self.addr=addr
13         self.cn=cn
14 
15 p1=Person('James',23,'Beijing')
相關文章
相關標籤/搜索