在Python 2.7中,在定义类时,我们如何定义
类级别的成员函数,即它的第一个参数是类对象,而不是类的实例对象
班级成员职能'实例对象,即它的第一个参数是类的实例对象,而不是类对象。
当使用给定的类时,我们如何判断成员函数是在类的级别还是在类的级别上?实例对象?
例如,在Python标准库中,为setUp()
的每个实例对象调用TestCase
TestCase
,即在实例对象的级别,而
类级别的装置在TestSuite
中实现。当测试套件遇到来自新类的测试时,将调用上一课程中的tearDownClass()
(如果有的话),然后调用setUpClass()
新班。
感谢。
答案 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}