python笔记——类属性和实例属性详解

系统 643 0

在定义类(class)的时候发现属性这个地方有很多坑,类属性、实例属性、局部变量傻傻分不清。
在在本文中介绍以下内容(全部跟定义类有关)

  1. 类属性
  2. 实例属性

一. 类属性:定义类的模块添加的属性


1. 调用:

在内部用类名.类属性名调用,
外部既可以用类名.类属性名又可以用实例化对象.类属性名来调用

demo1

            
              
                class
              
              
                Car
              
              
                (
              
              
                )
              
              
                :
              
              
                type
              
              
                =
              
              
                "new"
              
                      
my_car 
              
                =
              
               Car
              
                (
              
              
                )
              
              
                print
              
              
                (
              
              my_car
              
                .
              
              
                type
              
              
                )
              
              
                ### 实例对象.类属性名调用
              
              
                print
              
              
                (
              
              Car
              
                .
              
              
                type
              
              
                )
              
              
                ### 类名.类属性名调用
              
            
          

输出结果:

            
              new         
new

            
          

2. 修改:通过类名.类属性修改,在全局任何地方都可以修改

demo2

            
              
                class
              
              
                Car
              
              
                (
              
              
                )
              
              
                :
              
              
                type
              
              
                =
              
              
                "new"
              
               
Car
              
                .
              
              
                type
              
              
                =
              
              
                "newnew"
              
              
my_car 
              
                =
              
               Car
              
                (
              
              
                )
              
              
                print
              
              
                (
              
              Car
              
                .
              
              
                type
              
              
                )
              
              
                print
              
              
                (
              
              my_car
              
                .
              
              
                type
              
              
                )
              
            
          

输出结果:

            
              newnew
newnew        
              
                ###通过输出结果可以看出修改成功了
              
            
          

二、实例属性:类内所有方法可调用(标志:self.属性名)


  1. 在__init__(self,…)中初始化的属性,self.属性名
  2. 在类中的其他方法中定义的self.属性名
    因为__init__函数比较特殊,所以单拿出来讲,关于__init__方法:
    这两种情况会在demo中一一举例

要点:以self为前缀的变量都可以供类中的所有方法使用
外部调用时用实例对象.属性名

demo

            
              
                class
              
              
                Car
              
              
                (
              
              
                )
              
              
                :
              
              
                type
              
              
                =
              
              
                "new"
              
              
                ###类属性
              
              
                def
              
              
                __init__
              
              
                (
              
              self
              
                ,
              
              make
              
                ,
              
              year
              
                )
              
              
                :
              
                
        self
              
                .
              
              make 
              
                =
              
               make                            
        self
              
                .
              
              year 
              
                =
              
               year               
              
                ### make,year在实例化对象的时候必须传入相应参数    必需实例属性
              
              
        self
              
                .
              
              length 
              
                =
              
              
                2000
              
              
                ### 由于__init__方法定义的时候没有wo,所以在实例化对象的时候无需传入    非必需属性
              
              
                def
              
              
                get_name
              
              
                (
              
              self
              
                )
              
              
                :
              
              
        long_name 
              
                =
              
               self
              
                .
              
              year
              
                +
              
              
                ' '
              
              
                +
              
              self
              
                .
              
              make
              
                +
              
              
                " "
              
              
                print
              
              
                (
              
              long_name
              
                ,
              
              self
              
                .
              
              length
              
                )
              
                      
my_car 
              
                =
              
               Car
              
                (
              
              
                'aodi'
              
              
                ,
              
              
                '2010'
              
              
                )
              
              
my_car
              
                .
              
              get_name
              
                (
              
              
                )
              
            
          

输出结果:

            
              
                2010
              
               aodi  
              
                2000
              
            
          

从上面的注释中可以看出有两种实例属性,一种是必需实例属性(如demo中的make,year,它们是在__init__方法中定义的时候定义的,在实例化对象的时候必须传入),一些是非必需实例属性如(length,当然后面的方法也可以调用它,但在实例化对象的时候无需传入)。


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请请扫描上面二维码支持博主1元、2元、5元等您想捐的金额吧,狠狠点击下面给点支持吧

发表我的评论
最新评论 总共0条评论