类方法和静态方法

Posted liudaya

tags:

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

普通实例方法,第一个参数需要是self,它表示一个具体的实例本身。

如果用了staticmethod,那么就可以无视这个self,而将这个方法当成一个普通的函数使用。

而对于classmethod,它的第一个参数不是self,是cls,它表示这个类本身。

@classmethod修饰符对应的函数不需要实例化,不需要self参数,第一个参数需要是表示自身类的cls参数,cls参数可以用来调用类的属性,类的方法,实例化对象等。

@staticmethod返回函数的静态方法,该方法不强制要求传递参数

示例:

class Foo(object):
    """类三种方法语法形式"""

    def instance_method(self):
        print("是类{}的实例方法,只能被实例对象调用".format(Foo))

    @staticmethod
    def static_method():
        print("是静态方法")

    @classmethod
    def class_method(cls):
        print("是类方法")

foo = Foo()
foo.instance_method()
foo.static_method()
foo.class_method()
print(----------------)
Foo.static_method()
Foo.class_method()
class C(object):
    @staticmethod
    def f():
        print(runoob);

C.f();          # 静态方法无需实例化
cobj = C()
cobj.f()        # 也可以实例化后调用
class A(object):

    # 属性默认为类属性(可以给直接被类本身调用)
    num = "类属性"

    # 实例化方法(必须实例化类之后才能被调用)
    def func1(self): # self : 表示实例化类后的地址id
        print("func1")
        print(self)

    # 类方法(不需要实例化类就可以被类本身调用)
    @classmethod
    def func2(cls):  # cls : 表示没用被实例化的类本身
        print("func2")
        print(cls)
        print(cls.num)
        cls().func1()

    # 不传递默认self参数的方法(该方法也是可以直接被类调用的,但是这样做不标准)
    def func3():
        print("func3")
        print(A.num) # 属性是可以直接用类本身调用的

 

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

无法对非静态方法 getAssets() 进行静态引用 - 无法在片段中播放音频

Java 核心基础之static静态代码块和静态方法

java代码块,静态代码块,静态变量,构造方法执行顺序

从活动中调用片段中的非静态方法?

实用工具类的静态成员(null)生命周期

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