python静态方法,类方法,属性方法,实例方法

DAY 3. 静态方法,类方法,属性方法,实例方法

有四种方法,实例方法,类方法,静态方法,属性方法

  • 实例方法

实例方法的第一个参数是self,他会指向类的实例化对象,只能被对象调用,如

class Demo:

    def instanceMethod(self):
        print("this is a instance method")

if __name__ == "__main__":
    demo = Demo()
    demo.instanceMethod()

用点调用时不需要传入对象参数,python会把调用实例方法的对象作为实例方法的第一个参数传入,等价于

if __name__ == '__main__':
    demo = Demo()
    Demo.instanceMethod(demo)
  • 类方法

使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,可以使用类(例如C.f())或实例(例如C()。f())调用类方法。 除了类之外,该实例被忽略。 如果为派生类调用类方法,则派生类对象将作为隐含的第一个参数传递。

class Demo:

    @classmethod
    def classMethod(self):
        print("this is a class method")

if __name__ == "__main__":
    demo = Demo()
    Demo.classMethod()
    demo.classMethod()

同样是语法糖,用点调用时会自动把调用类方法的类或对象作为第一个参数传入

  • 静态方法

用 @staticmethod 装饰的不带 self 参数的方法叫做静态方法,静态方法不会接收隐式的第一个参数,类似于c++中的静态方法,只是占用了类的命名空间,与类没有联系,了一使用类名或对象名调用

  • 属性方法

用来将一个方法变成静态属性,使用修饰器@property

class C:
    def __init__(self):
        self._x = None

    @property
    def x(self):
        """I'm the 'x' property."""
        return self._x

    @x.setter
    def x(self, value):
        self._x = value

    @x.deleter
    def x(self):
        del self._x

TODO : 有点难改天专门学

总结

方法 修饰器 调用 使用场景(个人理解)
实例方法 / 只能被对象调用 大多数场景
类方法 @classmethod 能被对象或类调用 只操作类属性
静态方法 @staticmethod 能被对象或类调用 不操作类中的属性和方法
属性方法 @property 按静态属性的方法调用(不加括号) TODO

参考文章
GitHub 关于python的面试题

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

Python面向对象静态方法,类方法,属性方法

Python 实例方法、类方法、静态方法的区别与作用

python 文档 staticmethod

python 文档 classmethod

你可能感兴趣的:(python)