標籤:mat write gpo str coding enc 成員 面向 utf-8
類成員:欄位+方法+屬性
欄位:普通(執行個體對象,每個對象儲存一次)+靜態(全域變數,只儲存一次,所有方法共用)
方法:普通方法(執行個體方法:self.fun())+類方法(@classmathod)+靜態方法(所有方法分類)
屬性:方法屬性
#1普通方法:(使用較多)
#encoding=utf-8
class Foo:
def __init__(self, name):
self.name = name
def ord_func(self):
""" 定義普通方法,至少有一個self參數 """
# print self.name
print u‘普通方法‘
#2類方法:(不能使用執行個體)
@classmethod
def class_func(cls):
""" 定義類方法,至少有一個cls參數 """
print u‘類方法‘
#3靜態方法:(將分類)(不能使用執行個體)
@staticmethod
def static_func():
""" 定義靜態方法 ,無預設參數"""
print u‘靜態方法‘
# 調用普通方法:執行個體+.+方法
f = Foo("gloryroad")
f.ord_func()
# 調用類方法:類+.+方法
Foo.class_func()
# 調用靜態方法:
Foo.static_func()
執行個體:
將兩個檔案操作方法,一個改成類方法,一個改成靜態方法,再加上執行個體方法,讀取檔案全部
#coding=utf-8
class rw(object):
#建構函式--構造執行個體的函數,不能被類方法或者靜態方法引用參數
# def __init__(self,mydir):
# self.mydir=mydir
#追加寫檔案*類方法
@classmethod
def w(cls,path,content):
with open(path.decode("utf-8"),"a") as fp:
fp.write(content+"\n")
#讀指定行檔案內容*靜態方法
@staticmethod
def r(path,linenum):
lineno=0
with open(path.decode("utf-8"),"r") as f:
for line in f:
lineno+=1
if linenum==lineno:
return line
return ""
fh=rw("e:\\a.txt")
rw.w("e:\\a.txt","hezyy")
print rw.r("e:\\a.txt",2)
三個方法區別:
類方法可以被類對象或執行個體調用,執行個體方法只能被執行個體調用,它
只屬於類的單個執行個體擁有,靜態方法兩者都能調用,它在類和實
例間共用。Python實現了一定的靈活性使得類方法和靜態方法,
都能夠被執行個體和類二者調用。
所以三者主要區別在於參數傳遞上的區別,執行個體方法隱含傳的參
數是類執行個體self,而類方法隱含傳遞的參數是類本身cls,而靜態方
法無隱含參數,主要為了類執行個體也可以直接調用靜態方法
python物件導向之方法