Python类方法与静态方法完全指南

发表时间: 2024-04-15 07:55

在 Python 中,有两种类型的方法:@classmethod @staticmethod。 这两种方法都与类相关联,而不是与类的实例相关联。虽然这两者在语法上相似,但它们的用途不同,行为也不同。

什么是类方法?

类方法是绑定到类而不是类的实例方法。Classmethod 被定义为装饰器@classmethod,它接受 class(cls) 作为其第一个参数,该参数使用 cls 表示。因此,classmethod 通常用作构造函数创建类的新实例)或修改类级属性。类方法不能直接访问或修改特定于实例的属性。

为了理解 classmethod 的用法,让我们看一个代码片段。

class Cat:  total_cats = 0  def __init__(self, name):      self.name = name      Cat.total_cats += 1    @classmethod  def show_total_cats(cls):      return cls.total_cats
cat1 = Cat("Tom")cat2 = Cat("Jerry")print("Total number of cats", Cat.show_total_cats())# The output of above program will be 2

在上面的例子中,有一个类 Cat,其中 total_cats 是一个类级变量,每次创建一个 Cat 实例时,它都会更新。

但是,当想访问猫的总数时,我直接使用 class 调用了我的方法。 就像 Cat.show_total_cats() 而不是在 cat instance( ) 上调用它。如果是后者,那么结果将是一样的。它将返回整个类的猫计数,而不仅仅是实例的猫计数t1

什么是静态方法?

静态方法未绑定到类或实例。它不需要任何特殊参数,如 classmethods(cls)。它的行为类似于类中的普通方法。Staticmethod 是用装饰器@staticmethod定义的。 staticmethods 不能直接修改特定于实例的属性或类级别的属性。因此,理想情况下,如果想创建一些类独有的方法,则可以使用 staticmethod。

通过一个简单的代码片段来进一步理解它。

class Calculate:    @staticmethod    def add(a, b):        return a+b        @staticmethod    def sub(a, b):        return a-b
print("The sum of 3 and 5 is:", Calculate.add(3, 5))calc = Calculate()print("The difference of 5 and 3 is:", calc.sub(5, 3))# The output of first statement will be 8# The output of secons statement will be 2

在上面的示例中,Calculate类有两个静态方法add和 sub,它们执行简单的算术运算。这些静态方法不需要访问任何类级数据或实例级数据。它们是自给自足的,就像根据提供的输入进行操作一样

此外,如果您看到第一个 print 语句,则可以使用 class(Calculate) 直接访问它,如果您看到第二个 print 语句,我已经创建了我的类的一个对象并使用该实例执行了操作。calcCalculate

因此,总而言之,为了方便起见,staticmethods函数在类内部组织,但它们不依赖于类中的任何数据或行为。可以直接调用它们,而无需创建类的实例。