0x01: 类方法

  • 第一个形参是类对象的方法
  • 需要用装饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数。
  1. class Dog(object):
  2. __type = "狗"
  3. # 类方法,用classmethod来进行修饰
  4. @classmethod
  5. def get_type(cls):
  6. return cls.__type
  7. print(Dog.get_type())

使用场景:

  • 当方法中需要使用类对象(如访问私有类属性等)时,定义类方法
  • 类方法一般和类属性配合使用

0x02:静态方法

  • 需要通过装饰器@staticmethod来进行修饰,静态方法既不需要传递类对象也不需要传递实例对象(形参没有self/cls)
  • 静态方法 也能够通过实例对象类对象去访问。 ```python class Dog(object): type = “狗”

    def init(self):

      name = None
    

    静态方法

    @staticmethod def introduce(): # 静态方法不会自动传递实例对象和类对象

      print("犬科哺乳动物,属于食肉目..")
    

dog1 = Dog() Dog.introduce() # 可以用 实例对象 来调用 静态方法 dog1.introduce() # 可以用 类对象 来调用 静态方法

使用场景:

- 当方法中**既不需要使用实例对象**(如实例对象,实例属性),**也不需要使用类对象**(如类属性、类方法、创建实例等)时,定义静态方法
- **取消不需要的参数传递**,有利于**减少不必要的内存占用和性能消耗**

<a name="KiWLs"></a>
### 注意点:

- 类中定义了同名的方法时,调用方法会执行最后定义的方法
```python
class Dog:

    def demo_method(self):
        print("对象方法")

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

    @staticmethod
    def demo_method():  # 被最后定义
        print("静态方法")

dog1 = Dog()
Dog.demo_method()  # 结果: 静态方法
dog1.demo_method()  # 结果: 静态方法