如何在类级别或实例对象级别定义类的成员函数?

时间:2016-08-24 18:49:47

标签: python python-2.7

在Python 2.7中,在定义类时,我们如何定义

  • 类级别的成员函数,即它的第一个参数是类对象,而不是类的实例对象

  • 班级成员职能'实例对象,即它的第一个参数是类的实例对象,而不是类对象。

当使用给定的类时,我们如何判断成员函数是在类的级别还是在类的级别上?实例对象?

例如,在Python标准库中,为setUp()的每个实例对象调用TestCase TestCase,即在实例对象的级别,而 类级别的装置在TestSuite中实现。当测试套件遇到来自新类的测试时,将调用上一课程中的tearDownClass()(如果有的话),然后调用setUpClass() 新班。

感谢。

1 个答案:

答案 0 :(得分:2)

  

@classmethod表单是一个函数装饰器 - 请参阅说明   函数定义中的函数定义以获取详细信息。

     

可以在类(例如C.f())或实例上调用它   (例如C()。f())。除了类之外,该实例被忽略。如果一个   为派生类调用类方法,派生类对象   作为隐含的第一个参数传递。

     

类方法与C ++或Java静态方法不同。如果你   想要那些,请参阅本节中的staticmethod()。

     

有关类方法的更多信息,请参阅文档   标准类型层次结构中的标准类型层次结构。

https://docs.python.org/2/library/functions.html#classmethod

class A:
...    message = "class message"
... 
...    @classmethod
...    def classLevel(cls):
...       print(cls.message)
... 
...    def instanceLevel(self, msg):
...       self.message = msg
...       print(self.message)
>>> a= A()
>>> a.instanceLevel('123')
123
>>> A.classLevel()
class message
>>> a.classLevel()
class message
>>> A.instanceLevel()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unbound method instanceLevel() must be called with A instance as first argument (got nothing instead)


    A.__dict__
{'classLevel': <classmethod object at 0x4E974BB0>, '__module__': '__main__', 'instanceLevel': <function instanceLevel at 0x550C8530>, 'message': 'class message', '__doc__': None}