# ç±»æ¹æ³åéææ¹æ³
å¨è®²ç±»æ¹æ³åéææ¹æ³ä¹åï¼å
æ¥çä¸ä¸ªç®åçä¾åï¼
```python
class A(object):
def foo(self):
print 'Hello ', self
>>> a = A()
>>> a.foo()
Hello, <__main__.A object at 0x10c37a450>
```
å¨ä¸é¢ï¼æä»¬å®ä¹äºä¸ä¸ªç±» Aï¼å®æä¸ä¸ªæ¹æ³ fooï¼ç¶åæä»¬å建äºä¸ä¸ªå¯¹è±¡ aï¼å¹¶è°ç¨æ¹æ³ fooã
## ç±»æ¹æ³
妿æä»¬æ³éè¿ç±»æ¥è°ç¨æ¹æ³ï¼è䏿¯éè¿å®ä¾ï¼é£åºè¯¥æä¹åå¢ï¼
Python æä¾äº `classmethod` è£
饰å¨è®©æä»¬å®ç°ä¸è¿°åè½ï¼çä¸é¢çä¾åï¼
```python
class A(object):
bar = 1
@classmethod
def class_foo(cls):
print 'Hello, ', cls
print cls.bar
>>> A.class_foo() # ç´æ¥éè¿ç±»æ¥è°ç¨æ¹æ³
Hello,
1
```
å¨ä¸é¢ï¼æä»¬ä½¿ç¨äº `classmethod` è£
é¥°æ¹æ³ `class_foo`ï¼å®å°±åæäºä¸ä¸ªç±»æ¹æ³ï¼`class_foo` çåæ°æ¯ clsï¼ä»£è¡¨ç±»æ¬èº«ï¼å½æä»¬ä½¿ç¨ `A.class_foo()` æ¶ï¼cls 就伿¥æ¶ A ä½ä¸ºåæ°ãå¦å¤ï¼è¢« `classmethod` è£
é¥°çæ¹æ³ç±äºææ cls åæ°ï¼å æ¤æä»¬å¯ä»¥å¨æ¹æ³éé¢è°ç¨ç±»ç屿§ãæ¹æ³ï¼æ¯å¦ `cls.bar`ã
## éææ¹æ³
å¨ç±»ä¸å¾å¾æä¸äºæ¹æ³è·ç±»æå
³ç³»ï¼ä½æ¯åä¸ä¼æ¹åç±»åå®ä¾ç¶æçæ¹æ³ï¼è¿ç§æ¹æ³æ¯**éææ¹æ³**ï¼æä»¬ä½¿ç¨ `staticmethod` æ¥è£
é¥°ï¼æ¯å¦ä¸é¢çä¾åï¼
```python
class A(object):
bar = 1
@staticmethod
def static_foo():
print 'Hello, ', A.bar
>>> a = A()
>>> a.static_foo()
Hello, 1
>>> A.static_foo()
Hello, 1
```
å¯ä»¥çå°ï¼éææ¹æ³æ²¡æ self å cls åæ°ï¼å¯ä»¥æå®çææ¯ä¸ä¸ªæ®éç彿°ï¼æä»¬å½ç¶å¯ä»¥æå®åå°ç±»å¤é¢ï¼ä½è¿æ¯ä¸æ¨èçï¼å 为è¿ä¸å©äºä»£ç çç»ç»åå½å空é´çæ´æ´ã
# å°ç»
- ç±»æ¹æ³ä½¿ç¨ `@classmethod` è£
饰å¨ï¼å¯ä»¥ä½¿ç¨ç±»ï¼ä¹å¯ä½¿ç¨å®ä¾ï¼æ¥è°ç¨æ¹æ³ã
- éææ¹æ³ä½¿ç¨ `@staticmethod` è£
饰å¨ï¼å®æ¯è·ç±»æå
³ç³»ä½å¨è¿è¡æ¶åä¸éè¦å®ä¾åç±»åä¸çæ¹æ³ï¼å¯ä»¥ä½¿ç¨ç±»åå®ä¾æ¥è°ç¨ã