对于实例和静态成员之间的“自我”如何识别,这种想法是否正确?

时间:2013-11-30 02:10:33

标签: python oop

    我正在学习OOP,所以我对下面两个语句的问题似乎对许多人来说非常基本,但我只是想检查一下我是否以错误的方式使用Python / OO术语:

  - 您必须明确定义'self'作为每个类方法中的第一个参数。

  - Python明确要求self作为类中定义的方法的第一个参数,这使得人们清楚实例和静态方法之间的区别是什么。

    如果关于'self'关键字的语句是正确的,那么推断它作为方法定义中的参数或作为变量的前缀是否正确;单词'self'的存在通常表示方法或变量是静态的,而缺少单词'self'通常表示方法或变量是实例方法或变量?

2 个答案:

答案 0 :(得分:2)

第一个参数的名称在语法上并不重要。按惯例,它是普通方法的self,但是没有强制执行。

语法上最重要的是如何构造方法。方法是一种常规方法,它将接收它作为第一个参数调用的实例,除非通过classmethodstaticmethod内置函数转换为类方法或静态方法。

类方法接收类作为其第一个参数,按照惯例,该参数名为cls。虽然因为类方法不像普通方法那么常见,但我发现与常规方法的偏差比普通方法更多。 klass并非完全不常见,有时人们会粗心大意并且习惯使用self

静态方法不会收到任何自动参数。

class ExampleClass(object):

    def sample_instance_method(self):
        # this is a normal instance method
        pass

    @classmethod
    def sample_class_method(cls):
        # this is a class method, and will not receive the individual instance if called on one
        pass

    @staticmethod
    def sample_static_method():
        # this is a static method, and will not receive either the instance or the class when called
        pass

答案 1 :(得分:0)

不,反之亦然。

但我可以看出为什么会有疑问,这些陈述令人困惑:你将self作为实例方法中的第一个参数,而不是将它放在静态方法中。

请注意,虽然不需要命名第一个参数self,但最好遵循该约定,因为它对读者来说更清楚。

另外,不要将self命名为静态方法中的第一个参数,这是可能的,是的,但是你肯定会混淆读者。