Python——实例属性、类属性、私有属性与实例方法、类方法、静态方法

原创声明:本文系博主原创文章,转载或引用请注明出处。

 

在Python中,对象的属性分为实例属性与类属性;对象的方法分为普通方法、类方法与静态方法。

 

一、属性:

  实例属性在每创造一个实例时都会初始化一遍,不同的实例的实例属性可能不同;

  类属性在创建类的时候初始化,不同实例的类属性都相同。如果实例显示的修改了"类属性",则"类属性"被实例属性覆盖,

  若要再次访问或修改类属性,则只能通过 className.propertyName 来调用;当多个实例试图修改类属性时可能发生资源竞争,

  必要时需要加锁进行同步。

 

  1)实例属性:

    实例属性没有规定必须在哪里定义,但是必须确保实例属性在调用之前已经被定义,因此常见的做法是在__init__中定义。

    调用方法是: instanceName.propertyName 。

    注意,定义类时,成员方法第一个参数为self,其实self也是一个形参表示的实例。

  2)类属性:

    在类的作用域内声明,为类及类的所有实例共有。

    在内部用 className.propertyName 调用,如果在成员方法中不对 propertyName 进行修改,则也可以用 self.propertyName 调用;

    在外部既可以用 className.propertyName ,又可以用 instanceName.propertyName 来调用。

  3)私有属性(方法):

    1. _xx:常用来标记私有属性,但是外部依然可以访问更改
    2. __xx:外部不可通过 instanceName.propertyName 来访问或者更改,实际是解释器将其转化为 _className__propertyName 。
    3. __xx__:类的magic方法或解释器使用的一些全局变量的命名规则,要避免使用这种命名规则。

 

二、方法

  1)普通类方法:

    def method(self,...):

      pass

  2)静态方法:用@staticmethod装饰器修饰

    不能访问实例属性,参数不能传入self,若传入self,则需要在调用时显示给定实例。

  3)类方法:用@classmethod装饰器修饰

    实例属性可以覆盖类属性,推荐用cls作入口参数。

     

      静态方法与类方法都可以通过类或者实例来调用。其两个的特点都是不能够调用实例属性

 

【参考资料】

  1. https://www.cnblogs.com/pengsixiong/p/4823473.html

 

posted @ 2019-07-23 18:07  怪猫佐良  阅读(1071)  评论(0编辑  收藏  举报