2013-06-24 37 views
2

在Python中,有一種類型爲int的方法,即int.from_bytes。它不是一個特定int的方法,而是它的一種方法。例如。如何在Python中定義像int.from_bytes()這樣的方法?

>>> int.from_bytes(b'\xee\xff',"big") 
61183 

>>> int.from_bytes 
<built-in method from_bytes of type object at 0x107fdb388> 

如何定義這樣的事情?假設定義了一個名爲「point」的類,我該如何定義類似

>>> point.from_coordinates(3,5) 
<__main__.point object at 0x10c0c9310> 

>>> point.from_keys(b'\x12\x3e') 
<__main__.point object at 0x10bed5890> 

? (假設點由一些不同的方法被初始化。)

+0

[Python @classmethod和@staticmethod for beginner?]的可能重複?(http://stackoverflow.com/questions/12179271/python-classmethod-and-staticmethod-for-beginner) – Bakuriu

回答

6

你想classmethod,其通常用作裝飾:

class point(object): 
    @classmethod 
    def from_coordinates(cls, x, y): 
     pt = cls() 
     pt.x, pt.y = x, y 
     return pt 

這有時被稱爲「備用構造函數」成語。如果有多種不同的方法來構建你的類型,而不是把它們全部放入一個帶有一些可選參數或varags的方法中,將它們全部放入單獨的classmethod s中。

3

可以使用classmethod,如嘲笑了其例子預計init整數,而且還提供了方便的from_hex試圖把字符串,並將其轉換爲整數...

class MyClass(object): 
    def __init__(self, a, b): 
     self.a = a 
     self.b = b 
    @classmethod 
    def from_hex(cls, a, b): 
     return cls(int(a, 16), int(b, 16)) 

from_hex知道它與哪個類關聯,因此通過調用cls(...),您可以構建一種MyClass類型,就好像您自己用有效整數書寫了MyClass(a, b)一樣。

相關問題