我来自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()
。在
我的想法正确吗?非常感谢。在
是的。处理对象实例的函数的参数中应该有
self
。否则,它们被视为类方法。在编辑
类方法并不意味着静态方法!{{cd3}函数在cd3}之前添加
不,你说得不对。要使某个对象成为类方法而不是实例方法,必须使用
classmethod
修饰符。这个方法仍然接受一个参数,但是这个param是类,而不是实例。所以:在Python中,类实际上并没有在它们内部定义块范围,所以在方法中仅仅引用
employeeCount
是行不通的——这就是为什么使用cls
参数的原因。在为了澄清,decorator只是一个函数的包装器-它也可以被编写
^{pr2}$并且
classmethod
是一个内置函数。在另外请注意,在Python中(正如我在Ruby中所想的那样),我们通常不会为简单变量(如
name
)编写访问器,而只是直接访问它们。在相关问题 更多 >
编程相关推荐