Python初學者對Instance Methods, Static Methods, Class Methods這三個名詞比較容易混淆,從字面意思上來看,Instance Methods是和實例(Instance)掛鉤、Static Methods大概和Java/C++的靜態方法差不多、而Class Method就不知道該如何解釋了,在這裡我們以實例來說明這三者的區別和用法。
最常見的Instance Methods是以第一個傳入參數(argument)為self為標誌,其處理的是實例屬性(instance attributes):
class Multi:
def imeth(self,x):
print self, x
使用時則是必須先實例化(instantiate)類別(class)才能呼叫(invoke):
>>> obj = Multi() >>> obj.imeth(1) <__main__.Multi instance…> 1 >>> obj.imeth(obj, 2) <__main__.Multi instance…> 2
Static Methods的確和Java/C++一樣,是用來處理類別屬性(class attributes)的,定義如下:
class Multi:
x = 0
@staticmethod
def smath():
Multi.x = Multi.x+1
print x
使用時可以自類別呼叫或自實例呼叫:
>>> obj = Multi() >>> obj.smeth() 1 >>> Multi.smeth() 2
最後Class Methods幾乎和Static Method一樣,除了Class Method的第一個參數(argument)是方法(method)被呼叫時使用的類別、或實例所屬的類別,定義如下:
Class Multi:
@classmethod
def cmeth(cls, x):
print cls, x
使用方法如下:
>>> obj = Multi() >>> Multi.cmeth(5) __main__.Multi 5 >>> obj.cmeth(6) __main__.Multi 6
注意__main__.Multi和<__main__.Multi instance…>的區別,一個是類別(class)一個是實例(instance),所以class method在繼承關係(inheritance)中,比方說你想要寫一個factory method(實例化類別用),用classmethod可以讓你正確的實例化該實例化的類別,即使呼叫該factory method的是原類別的子類別(subclass)。
問題描述: 在Linux下可將帶Unicode的字串利用print指令輸出到終端,其中將如果輸出導向一個檔案時,python會顯示UnicodeEncodeError異常,如下:
$ cat example.py
print u'Example: \u00F1'
$ python example.py
Example: ñ
$ python example.py > /dev/null
Traceback (most recent call last):
File "example.py", line 1, in <module>
print u'Example: \u00F1'
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf1' in position 9: ordinal not in range(128)
問題解析:這是由於標準的命令列終端是帶有編碼功能的,但若不是輸出到終端如輸出到檔案時,我們必須將unicode string手動編碼為byte string,最簡單的方法是利用字串類別內建的方法str.encode([encoding[, errors]]),範例如下:
print u'Example: \u00F1'.encode('utf-8')
這對擺在crontab中進行的worker process非常重要,因為這樣你就能夠在log日誌中提供更詳細的資訊以利於管理。
參考資料:
Favicon(XHTML 1.0 version):
代換href里的圖片地址
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xml:lang="en-US"
lang="en-US">
<head profile="http://www.w3.org/2005/10/profile">
<link rel="icon"
type="image/png"
href="http://example.com/myicon.png">
[…]
</head>
[…]
</html>
RSS Autodiscovery:
在Head加入以下代碼,并代換title和hred
<link rel="alternate" type="application/rss+xml" title="RSS Feed for petefreitag.com" href="/rss/" />
Refenrences:
