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:@classmethoddef 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@propertydef x(self):"""I'm the 'x' property."""return self._x@x.setterdef x(self, value):self._x = value@x.deleterdef x(self):del self._x
TODO : 有点难改天专门学
总结
方法 | 修饰器 | 调用 | 使用场景(个人理解) |
---|---|---|---|
实例方法 | / | 只能被对象调用 | 大多数场景 |
类方法 | @classmethod | 能被对象或类调用 | 只操作类属性 |
静态方法 | @staticmethod | 能被对象或类调用 | 不操作类中的属性和方法 |
属性方法 | @property | 按静态属性的方法调用(不加括号) | TODO |
参考文章
GitHub 关于python的面试题
Python静态方法、类方法、属性方法
Python面向对象静态方法,类方法,属性方法
Python 实例方法、类方法、静态方法的区别与作用
python 文档 staticmethod
python 文档 classmethod