美文网首页
python入门与进阶(9-9)

python入门与进阶(9-9)

作者: buaishengqi | 来源:发表于2018-05-04 11:11 被阅读32次

    9-9 在实例方法中访问实例变量与类变量
    看一看思维导图


    Python类.png

    问题如下,在实例方法的内部(强调在实例方法的内部)可以访问类变量吗?如果可以访问,那么访问的方式是什么?

    class Student():
        sum = 0
        name = '小鱼'
        age = 0 
    
    
    # 实例方法  定义实例方法的时候必须加上self
        def __init__(self,name,age): #构造函数的意义是初始化类的特征的
            #构造函数可以看做是一个特殊的实例方法。和普通的实例方法几乎是一样的
            #最大的不同是,调用的方式的不同
            self.name = name 
            self.age = age           
            print(self.name) #实例方法里操作实例变量
            
        def do_homework(self):#实例方法是描述类的行为的
            print('homework')
         
    student1 = Student('石敢当',18) #调用构造函数是通过类后面加上括号的方式来调用的
    student1.do_homework()#调用普通函数的是通过实例对象后面加点
    print(student1.name)
    print(student2.name) 
    print(Student.name) 
    
    # 来看一个经典的例子(容易犯错的,反面教材)
    
    class Student():
        sum = 0
        name = '小鱼'
        age = 0 
        def __init__(self,name,age): 
            
            self.name = name 
            self.age = age           
            print(self.name) #看看这个打印结果  有不一样的吗?
            print(name) #看看这个打印结果  有不一样的吗?打印结果如图1,都是一样的,为什么?
            
        def do_homework(self):
            print('homework')
         
    student1 = Student('石敢当',18)
    
    #当我们把形参列表中的name改成name1 看看结果是什么?如图2
    class Student():
        sum = 0
        name = '小鱼'
        age = 0 
        def __init__(self,name1,age): 
            
            self.name = name1
            self.age = age           
            print(self.name) 
            print(name) 
            
        def do_homework(self):
            print('homework')
         
    student1 = Student('石敢当',18)
    # 为什么出现图2的错误?
    # 因为self.name 读取的是实例变量,而print(name)读取的是形参列表,所以造成了假象,打印了两个一样的结果
    # 所以加上self很有必要
    
    
    # 如何在实例方法中访问类变量?
    class Student():
        sum = 0  #sum是内置函数
        name = '小鱼'
        age = 0 
        def __init__(self,name,age): 
            
            self.name = name
            self.age = age           
            print(sum)   #在实例方法中访问类变量看图3打印结果
            
            
        def do_homework(self):
            print('homework')
         
    student1 = Student('石敢当',18)
    
    # 在看一个例子
    class Student():
        sum1 = 0   #不是内置函数
        name = '小鱼'
        age = 0 
        def __init__(self,name,age): 
            
            self.name = name
            self.age = age           
            print(sum1)   #在实例方法中访问类变量看图4打印结果
            
            
        def do_homework(self):
            print('homework')
         
    student1 = Student('石敢当',18)
    # 上述的两个例子说明千万不要妄图在实例方法的内部通过不加self直接访问实例变量
    # 也不要想着不加前缀来访问类变量
    
    
    # 来看看正确的在实例方法中访问类变量的两种方式 如图5所示
    class Student():
        sum1 = 0  
        name = '小鱼'
        age = 0 
        def __init__(self,name,age): 
            
            self.name = name
            self.age = age           
            print(Student.sum1)   #在内部的使用
            
            
        def do_homework(self):
            print('homework')
         
    student1 = Student('石敢当',18)
    print(student1.name)
    print(Student.sum1)  #通过大写类名加点号在加变量名,这是在外部的使用!在内部同样可以!
    
    
    # 第二种方式
    class Student():
        sum1 = 0  
        name = '小鱼'
        age = 0 
        def __init__(self,name,age): 
            
            self.name = name
            self.age = age           
            print(self.__class__.sum1)   #这种方法也可以
            
            
        def do_homework(self):
            print('homework')
         
    student1 = Student('石敢当',18)
    print(student1.name)
    print(Student.sum1)  
    
    1.jpg 2.jpg 3.jpg 4.jpg 5.jpg

    相关文章

      网友评论

          本文标题:python入门与进阶(9-9)

          本文链接:https://www.haomeiwen.com/subject/ujarrftx.html