python static方法 - staticmethod和classmethod的区别。

Python classmethod / python / oop / methods / python-decorators

@staticmethod 装饰的函数和用@classmethod装饰的函数有什么 @classmethod

Anand Tripathi



Answer #1

类方法:与Java和C ++不同,Python没有构造函数重载。因此,可以使用 classmethod 实现此目的。以下示例将对此进行解释

让我们考虑一下,我们有一个 Person 类,它接受两个参数 first_namelast_name 并创建 Person 的实例。

让我们考虑一下,我们有一个 Person 类,它接受两个参数 first_namelast_name 并创建 Person 的实例。

class Person(object):

    def __init__(self, first_name, last_name):
        self.first_name = first_name
        self.last_name = last_name

现在,如果要求只需要使用一个名字(仅是 first_name )来创建类,那么您就无法在Python中执行此类操作。

当你试图创建一个对象(实例)时,这会给你一个错误。

class Person(object):

    def __init__(self, first_name, last_name):
        self.first_name = first_name
        self.last_name = last_name

    def __init__(self, first_name):
        self.first_name = first_name

但是,您可以使用 @classmethod 达到相同的目的,如下所述

但是,您可以使用 @classmethod 达到相同的目的,如下所述

class Person(object):

    def __init__(self, first_name, last_name):
        self.first_name = first_name
        self.last_name = last_name

    @classmethod
    def get_person(cls, first_name):
        return cls(first_name, "")

因此,假设在上面的示例中,您需要验证 first_name 不应超过20个字符,您可以简单地执行此操作。

因此,假设在上面的示例中,您需要验证 first_name 不应超过20个字符,您可以简单地执行此操作。

@staticmethod  
def validate_name(name):
    return len(name) <= 20
Person.validate_name("Gaurang Shah")