Python中的类方法/实例方法

2024-09-29 19:33:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我来自Ruby,我已经习惯了Python遵循的“显式而非隐式”的哲学,但我之前对如何真正地创建类方法感到困惑。现在,我要确认我在以下方面确实是正确的:

类中的每个方法本质上都是Python中的类方法。在

例如:

class Employee(object):

    employeeCount = 0
    def __init__(self, name):
        self.name = name
        employeeCount += 1

    def get_name(self):
        return self.name

    def get_employee_count():
        return employeeCount

如果我理解正确,例如david = Employee("david")以下两个是等价的:

david.get_name()和{}。同样,我们可以说get_employee_count也是一个类方法,但它不依赖任何实例,因此我们不传入实例。这就是为什么键入david.get_employee_count()没有意义,因为这将是Employee.get_employee_count(david),但是{}不接受参数,即实例。这意味着我们只需输入Employee.get_employee_count()。在

我的想法正确吗?非常感谢。在


Tags: 实例方法nameselfgetreturndefcount
2条回答

是的。处理对象实例的函数的参数中应该有self。否则,它们被视为类方法。在

编辑

类方法并不意味着静态方法!{{cd3}函数在cd3}之前添加

不,你说得不对。要使某个对象成为类方法而不是实例方法,必须使用classmethod修饰符。这个方法仍然接受一个参数,但是这个param是类,而不是实例。所以:

@classmethod
def get_employee_count(cls):
    return cls.employeeCount

在Python中,类实际上并没有在它们内部定义块范围,所以在方法中仅仅引用employeeCount是行不通的——这就是为什么使用cls参数的原因。在

为了澄清,decorator只是一个函数的包装器-它也可以被编写

^{pr2}$

并且classmethod是一个内置函数。在

另外请注意,在Python中(正如我在Ruby中所想的那样),我们通常不会为简单变量(如name)编写访问器,而只是直接访问它们。在

相关问题 更多 >

    热门问题