• 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
    

      

  • 相关阅读:
    Redis过期机制
    vim使用
    ex command in Linux with examples
    【转】Linux 文档编辑 : ex 命令详解
    vscode go语言环境搭建
    golang slice a 的地址和a[0]的地址不一样
    文件加锁,作用是用来做什么?以及使用细节
    文件锁
    go创建指定大小的文件,获取文件大小
    go 实现内存映射和进程间通信
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/7190077.html
Copyright © 2020-2023  润新知