Python普通方法静态方法类方法

Posted 风-fmgao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python普通方法静态方法类方法相关的知识,希望对你有一定的参考价值。

开始

# -*-coding:utf-8-*-
# 普通方法,类方法,静态方法的区别

__metaclass__ = type


class Tst:
    name = ‘tst‘

    data = ‘this is data‘

    # 普通方法
    def normalMethod(self, name):
        print self.data, name

    # 类方法,可以访问类属性
    @classmethod
    def classMethod(cls, name):
        print cls.data, name

    # 静态方法,不可以访问类属性
    @staticmethod
    def staticMethod(name):
        print name

测试

  • 三种方法都可以通过实例来调用,但是静态方法和类方法无法访问实例属性,所以更改了tst.data仅对普通方法起了作用
tst = Tst()
tst.data = ‘this is new‘
tst.normalMethod(‘name‘)
tst.staticMethod(‘name‘)
tst.classMethod(‘name‘)

#结果
this is new name
name
this is data name

区别

  • 普通方法不能通过类名调用,但是静态方法和类方法是可以的
# error普通方法必须通过实例调用
# Tst.normalMethod(‘name‘)
Tst.classMethod(‘name‘)
Tst.staticMethod(‘name‘)

#结果
this is data name
name

总结

  • 普通方法,可以通过self访问实例属性
def normalMethod(self,data)
  • 类方法,可以通过cls访问类属性
@classmethod
def classMethod(cls,data)
  • 静态方法,不可以访问,通过传值的方式
@staticmethod
def staticMethod(data)

以上是关于Python普通方法静态方法类方法的主要内容,如果未能解决你的问题,请参考以下文章

Python3 中类的静态方法普通方法类方法

一文详解python的类方法,普通方法和静态方法

四十python面向对象二

Python 如何正确使用静态方法和类方法?

Java类的各种成员初始化顺序如:父子类继承时的静态代码块,普通代码块,静态方法,构造方法,等先后顺

Python高级语法-对象实例对象属性-类与实例,class方法静态方法等(4.6.1)