美文网首页Python入门到精通
Python基础019--静态方法、类方法和类属性

Python基础019--静态方法、类方法和类属性

作者: 不一样的丶我们 | 来源:发表于2018-02-28 17:22 被阅读4次

静态方法、类方法和类属性

  • 实例方法
    • 语法:必须有一个参数,这个参数表示当前实例对象,一般是self
    • 调用:只能通过实例对象调用
  • 类方法
    • 语法:必须有一个参数,这个参数表示当前类对象,一般是cls,在方法的头部加注释(装饰器)@classmethod
    • 调用:实例对象可以调用,类对象也可以调用
  • 静态方法
    • 语法:普通函数的格式,不需要强制的要求传递参数,在方法的头部加上注释@staticmethod;一般用于与实例对象,类对象无关的内容
  • 实例方法、类方法、静态方法都可以通过实例或者类调用,只不过实例方法通过类调用时需要传递实例的引用
In [43]: class Test(object):
    ...:     def instancefun(self):                     # 实例方法
    ...:         print('instancefun')
    ...:         print(self)
    ...:     @classmethod
    ...:     def classfun(cls):                         # 类方法
    ...:         print('classfun')
    ...:         print(cls)
    ...:     @staticmethod
    ...:     def staticfun():                           # 静态方法
    ...:         print('staticfun')
    ...:     def function():                            # 普通函数
    ...:         print('func')
    ...:         
    In [44]: t = Test()                                 # 实例化一个的对象
    In [45]: t.instancefun()
    instancefun
    <__main__.Test object at 0x7f99fc879510>
    In [46]: Test.classfun()                            # 类调用类方法
    classfun
    <class '__main__.Test'>
    In [47]: t.classfun()                               # 对象调用类方法
    classfun
    <class '__main__.Test'>
    In [48]: Test.staticfun()                           # 类调用静态方法
    staticfun
    In [49]: t.staticfun()                              # 对象调用静态方法                          
    staticfun
    In [50]: Test.instancefun(t)                        # 类调用实例方法需要传递参数
    instancefun
    <__main__.Test object at 0x7f99fc879510>
    
  • 实例属性
    • 实例属性是对象持有的,不是共享的属性
    • 实例属性只有对象能够访问
  • 类属性
    • 定义在类内部,方法的外部的属性就是类属性
    • 在类的外部,通过类对象.属性就是类属性
  • 实例属性和类属性的区别
    • 类属性归所有的实例对象共享,可以通过类名访问,也可以通过实例来访问
    • 实例属性归具体某个实例对象所有,只能通过实例对象访问
# 类属性
In [55]: class Person(object):
    ...:     num = 100 
    ...:     def __init__(self):
    ...:         self.name = "zzz"
    ...:     def func(self):
    ...:         self.age = 100
    ...:         

In [56]: p1 = Person()
In [57]: p1.name = "aaa"                        # 通过实例化对象修改属性,发现属性并没有修改
In [58]: p2 = Person()
In [59]: print(p1.name)
aaa
In [60]: print(p2.name)
zzz
In [61]: Person.num = 200                       # 通过类对象修改属性,发现属性修改了
In [62]: print(p1.num)
200
In [63]: print(p2.num)
200

  • 如果需要在类外修改属性,必须通过类对象去引用然后进行修改;如果通过实例对象去引用,会产生一个同名的实例属性,这种方式修改的是实例属性,不会影响到类属性,并且之后如果通过实例对象去引用 该名称的属性,实例属性会强制屏蔽掉类属性,即引用的是实例属性,除非删除该实例属性;
  • 类中私有属性
    • __private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问
    • 在类内部的方法中使用时 self.__private_attrs
    • 访问私有属性其格式是:对象._字段名;
      • eg:Test._Test__name或者a._Test__name
In [85]: class Test:
    ...:     __name = 'aaa'
    ...:     def a(self):
    ...:         print Test.__name
    ...:         

In [86]: a = Test()
In [87]: a.a()
aaa
In [88]: print Test.__name                          # 不能直接访问私有属性
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-88-56cfd6a10fe4> in <module>()
----> 1 print Test.__name

AttributeError: class Test has no attribute '__name'

In [89]: print a._Test__name                        # 通过实例对象进行访问/也可以通过类对象进行访问
aaa

相关文章

  • Python基础019--静态方法、类方法和类属性

    静态方法、类方法和类属性 实例方法语法:必须有一个参数,这个参数表示当前实例对象,一般是self调用:只能通过实例...

  • @classmethod和@staticmethod的区别

    简介 类的成员 python中类的成员可以分为三大类:字段、方法和属性 类的方法 包括:普通方法、静态方法和类方法...

  • python类的静态方法和类方法区别

    python类的静态方法和类方法区别 先看语法,python 类语法中有三种方法,实例方法,静态方法,类方法。 本...

  • 2019-01-18

    二、.NET基础概念《静态类》 静态类:用static修饰的类。 注意:静态类的成员必须是静态成员,包括属性和方法...

  • 4.类-静态方法及抽象类

    类的静态属性与静态方法 类可以直接使用静态属性及调用静态方法静态方法中无法调用类上面的属性(public,prot...

  • ES6解读3:类class

    类的继承 类的getter和setter方法 静态方法以及静态属性 注意:静态方法只能是类调用,不能实例调用

  • python 类属性和类方法

    类属性和类方法 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 —— 实例 使...

  • python重要知识点总结一

    内容包含: 元类 python 对象和类的绑定以及类方法,静态方法 python 子类调用父类方法总结 pytho...

  • python中OOP的类属性和方法与多态

    目录 类的结构 类属性和实例属性 类方法和静态方法 多态 私有属性和私有方法 01. 类的结构 1.1 术语 ——...

  • 30-类属性、实例属性

    类属性、实例属性 实例方法、类方法、静态方法

网友评论

    本文标题:Python基础019--静态方法、类方法和类属性

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