1.定義類
在python中可以使用class關鍵字定義類,然後在類中通過之前學習過的函式來定義方法,這樣就可以將物件的動態特徵描述出來
#類 類名 object
class class_name(object):
def __init__(self): # __init__是乙個特殊方法用於在建立物件時進行初始化操作
self.a=1000
def a(self):在類中,一切的變數和函式都要印記(self)
print(self.a)
if __name__ =="__main__":
com = class_name() #()就相當於走了初始化__init__
com.a() #在類中呼叫使用"."
class wxm(object):
def __init__(self,path):
self.path = path
self.count = 0
def read(self):
with open(self.path,mode='r') as f:
lines = f.readlines()
for line in lines:
new_line = line.strip('\n')
for i in new_line:
if i.isupper():
self.count += 1
print('the %d'%self.count)
if __name__ =="__main__":
path = 'c://users/lvli/desktop/com.txt'
wxm = wxm(path)
wxm.read()
例子2:用python定義乙個類描述進度條
import time
class joker(object):
def __init__(self):
self.count = 1
def jindutiao(self):
for i in range(0,100):
time.sleep(0.1)
print('%d%%\r'%(i+1),end="",flush=true)
if i%5 ==0:
res = '#'*self.count
print('%s %d%%\r'%(res,(i+5)),end="")
self.count += 1
print()
if __name__ ==" __main__"
joker = joker()
joker.jindutiao()
2.訪問可見性問題
在python中,屬性和方法的訪問許可權只有兩種,也就是公開的和私有的,如果希望屬性是私有的,在給屬性命名時可以用兩個下劃線作為開頭
# 私有變數,變數名前面加"__"
# 如果非要使用私有變數,那麼可以使用dir(class())去檢視它真正的名字.
# 私有變數/函式,在類內部可以直接呼叫.
# 如果你想體現乙個變數/函式特別重要你可以使用"_"
class class_name(object):
def __init__(self):
self.__a=1000
def a(self):
print(self.__a)
print(self.__b())
def __b(self):
print('hello')
if __name__ =="__main__":
#com = class_name()
#com.a()
#print(name.__a) #私有變數不可外部呼叫
#print(name.__b())
name = class_name()
print(dir(name))
3.類的動態繫結
class joker(object):
def __init__(self):
self.a = 1000
if __name__ =="__main__":
joker =joker()
joker.a =100000
print(joker.a)
#類的動態繫結
joker.b = 50000
print(joker.b)
4.@property裝飾器
python中屬性和方法訪問許可權的問題不建議將屬性設定為私有的,但是如果直接將屬性暴露給外界也是有問題,之前建議將屬性命名以單下劃線開頭,通過這種方式來暗示屬性是受保護的,不建議外界直接訪問,那麼如果想訪問屬性可以通過屬性的getter(訪問器)和setter(修改器)方法進行對應的操作,就可以考慮使用@property包裝器來包裝getter和setter方法,使得對屬性的訪問既安全又方便。
class joker(object):
def __init__(self):
self.__a =1000
@property
def look(self):
print(self.__a)
if __name__ =="__main__":
name = joker()
name.look #函式變成了乙個屬性self.look
5.__solts__魔法
我們需要限定自定義型別的物件只能繫結某些屬性,可以通過在類中定義__slots__變數來進行限定
class joker:
__slots__ =('uuu','hhh')
def __init__(self):
pass
if __name__ =='__main__':
joker = joker()
joker.uuu = 10000
print(joker.uuu)
6.靜態方法和類方法
我們在類中定義的方法都是物件方法,也就是說這些方法都是傳送給物件的訊息。實際上,我們寫在類中的方法並不需要都是物件方法,我們可以使用靜態方法來解決這類問題。
class joker_(object):
def __init__(self):
self.a = 10000
@staticmethod
def a(a,b,c,d):
print('hhahhahha')
print(a,b,c,d)
if __name__ =="__main__":
joker =joker_()
joker.a(1,2,3,4)
7.繼承
在已有類的基礎上建立新類,這其中的一種做法就是讓乙個類從另乙個類那裡將屬性和方法直接繼承下來,從而減少重複**的編寫。
class a(object):
def __init__(self,a1):
self.a = 1000
self.a1 = a1
def a1(self):
print('a1')
class b(a):
def __init__(self,a1):
a.__init__(self,a1)
pass
def b1(self):
print(self.a1)
if __name__ =="__main__":
b = b('joker')
b.b1()
私有變數不可被繼承
class a(object):
def __init__(self):
self.__a = 1000
def a1(self):
print('a1')
class b(a):
def __init__(self):
a.__init__(self)
def b1(self):
print(self._a__a)
self.a1()
if __name__ == "__main__":
b= b()
b.b1()
8.多型
子類在繼承了父類的方法後,可以對父類已有的方法給出新的實現版本,這個動作稱之為方法重寫(override),當我們呼叫這個經過子類重寫的方法時,不同的子類物件會表現出不同的行為,這個就是多型。
學習python 第四天
python 迴圈結構 迴圈結構可以輕鬆的控制某件事重複 再重複的發生。在python中構造迴圈結構有兩種做法,一種是for in迴圈,一種是while迴圈。for in迴圈 如果明確的知道迴圈執行的次數或者是要對乙個容器進行迭代 後面會講到 那麼我們推薦使用for in迴圈 用for迴圈實現1 1...
Python學習 第四天
map函式可以對序列中個每個值進行某種批量轉化操作,然後將結果作為迭代器iterator返回,迭代器可以利用for迴圈或者next 函式來訪問每個值。map函式接收兩個引數,乙個是函式f,乙個是iterator,map在iterable的每個元素上依次執行函式f,並把結果作為新的iterator迭代...
學習python,第四天
echo 內容 a 將內容放到檔案裡 ls lh a 會覆蓋原有內容 echo a 追加到末尾 不會覆蓋原有內容 管道 ls lha more shutdown關機 shutdown now立刻關機 shutdown r重啟 shutdown c取消 shutdown 10 00十點關機 shutd...