python之面向对象之类变量和实例变量详解编程语言

#Auther Bob 
#--*--conding:utf-8 --*-- 
 
#这里的变量全部都是实例变量 
class Role(object): 
    def __init__(self,name,role,wepon,life_value): 
        #实例变量 
        self.name = name 
        self.role = role 
        self.wepon = wepon 
        self.life_value = life_value 
    #类的方法 
    def buy_gun (self,wepon): 
        print("我的名字是[%s],我的角色是[%s],我新买了一把枪[%s],我剩下[%s]滴血" %(self.name,self.role,wepon,self.life_value)) 
        self.wepon = wepon 
 
 
 
p1 = Role("p1","Police","B10","10") 
print(p1.wepon) 
p1.buy_gun("C10") 
print(p1.wepon) 
 
 
# B10 
# 我的名字是[p1],我的角色是[Police],我新买了一把枪[C10],我剩下[10]滴血 
# C10 
 
print("-".center(100,"-")) 
#这里的变量有实例变量和类变量 
class Role(object): 
    #这里的nat就是类变量 
    nat = None 
    def __init__(self,name,role,wepon,life_value): 
        #这里的变量都是实例变量 
        self.name = name 
        self.role = role 
        self.wepon = wepon 
        self.life_value = life_value 
    def buy_gun (self,wepon): 
        print("我的名字是[%s],我的角色是[%s],我新买了一把枪[%s],我剩下[%s]滴血" %(self.name,self.role,wepon,self.life_value)) 
        self.wepon = wepon 
        # print(nat)  这样会报错的,因为nat这个变量是类的变量,不是实例的变量 
        print(self.nat) 
p1 = Role("p1","Police","B10","10") 
t1 = Role("t1","Terror","B11","11") 
 
print("xxxxxxxxxxxxxxxxxxxxxxxx") 
print(p1.nat) 
# None 
 
p2 = Role("p2","Police","B10","10") 
t2 = Role("t2","Terror","B11","11") 
 
p1.buy_gun("C10") 
# 我的名字是[p1],我的角色是[Police],我新买了一把枪[C10],我剩下[10]滴血 
# None 
t1.buy_gun("C11") 
# 我的名字是[t1],我的角色是[Terror],我新买了一把枪[C11],我剩下[11]滴血 
# None 
 
print("-".center(100,"-")) 
print("p1---->",p1.name,p1.nat,sep="|") 
# p1---->|p1|None 
 
 
print("t1---->",t1.name,t1.nat,sep="|") 
# t1---->|t1|None 
 
 
 
 
print("-".center(100,"-")) 
#对实例中的nat变量重新赋值,相当于在新增1个实例变量nat 
p1.nat = "China" 
t1.nat = "USA" 
print("p1---->",p1.name,p1.nat,sep="|") 
print("t1---->",t1.name,t1.nat,sep="|") 
print("p2---->",p2.name,p2.nat,sep="|") 
print("t2---->",t2.name,t2.nat,sep="|") 
 
 
# p1---->|p1|China 
# t1---->|t1|USA 
# p2---->|p2|None 
# t2---->|t2|None 
 
 
print("-".center(100,"-")) 
#这里我们对类变量进行赋值,但是只影响类变量nat,而不影响实例变量中的nat 
Role.nat = "Eng" 
print("p1---->",p1.name,p1.nat,sep="|") 
print("t1---->",t1.name,t1.nat,sep="|") 
print("p2---->",p2.name,p2.nat,sep="|") 
print("t2---->",t2.name,t2.nat,sep="|") 
 
 
# p1---->|p1|China 
# t1---->|t1|USA 
# p2---->|p2|Eng 
# t2---->|t2|Eng 
 
 
print("-".center(100,"-")) 
# print(Role.wepon) 
#这里会报错,因为Role中其实没有wepon这个变量,因为wepon这个变量是实例的变量,而不是类的变量,所以这里会报错 
Role.nat = "XXXX" 
Role.wepon = "YYYY" 
print(Role.wepon) 
#这里为什么可以执行成功呢,其实这里的wepon和实例的中的wepon是不是一个变量,Role.wepon = "YYYY"这个给类重新定义了一个wepon这个变量,这个变量也是类的变量,而不是实例中的变量 
#所以这里改了wepon的值,实际给类的wepon定义了,但是根本就不会影响实例中的wepon的值 
print("p1---->",p1.name,p1.nat,p1.wepon,sep="|") 
print("t1---->",t1.name,t1.nat,t1.wepon,sep="|") 
print("p2---->",p2.name,p2.nat,p2.wepon,sep="|") 
print("t2---->",t2.name,t2.nat,t2.wepon,sep="|") 
 
 
# p1---->|p1|China 
# t1---->|t1|USA 
# p2---->|p2|Eng 
# t2---->|t2|Eng 
 
 
print("-".center(100,"-")) 
#这里我们定义了一个类变量nat,在实例中我们根本就没有定义nat这个变量,其实这里的原理是这样的,这里的访问和赋值处理的变量其实是不一样的 
#在实例中,如果我们去访问类变量nat,因为我们的实例中并没有这个变量,所有这里的访问是访问的类的变量 
#在实例中,如果我们去重新赋值给nat,那么其实就是给这个实例新增加了一个实例变量nat 
 
 
class Role(object): 
    #这里的nat就是类变量 
    nat = None 
    def __init__(self,name,role,wepon,life_value): 
        #这里的变量都是实例变量 
        self.name = name 
        self.role = role 
        self.wepon = wepon 
        self.life_value = life_value 
    #这个是类的方法 
    #self是实例本身 
    def buy_gun (self,wepon): 
        print("我的名字是[%s],我的角色是[%s],我新买了一把枪[%s],我剩下[%s]滴血" %(self.name,self.role,wepon,self.life_value)) 
        self.wepon = wepon 
        print(self.nat)   #这里就打印的就是类的变量nat 
        self.nat = "France" 
        print(self.nat) 
 
 
2b = Role("2b","Teacher","B51","1000") 
2b.buy_gun("B52") 
# 我的名字是[2b],我的角色是[Teacher],我新买了一把枪[B52],我剩下[1000]滴血 
# None 
# France 

  

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/20895.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论