(1)物件導向技術簡介
類定義語法格式:
class classname:..
類例項化後,可以使用其屬性,實際上,建立乙個類之後,可以通過類名訪問其屬性。
類物件類物件支援兩種操作:屬性引用和例項化。
屬性引用使用和 python 中所有的屬性引用一樣的標準語法:obj.name。
類物件建立後,類命名空間中所有的命名都是有效屬性名。
class myclass:
i = 12345 # 類變數
def __init__(self,m,n): # 構造方法,該方法在類例項化時會自動呼叫
self.data1 = m # m,n例項變數
self.data2 = n
def f(self): #方法
return 'hello world'
print('myclass 類的屬性 i 為:', x.i) # 訪問類的屬性和方法
print('myclass 類的方法 f 輸出為:',x.f())
print('myclass 類的構造方法輸出為:',x.data1,x.data2)
結果:myclass 類的屬性 i 為: 12345
myclass 類的方法 f 輸出為: hello world
名為init() 的特殊方法(構造方法),類的例項化操作會自動呼叫init() 方法。init() 方法可以有引數,引數通過init() 傳遞到類的例項化操作上;也可無引數,例項化時便不用給定實參。
self代表的是類例項,而非類
類的方法與普通的函式只有乙個特別的區別——它們必須有乙個額外的第乙個引數名稱, 按照慣例它的名稱是 self。
class test:
def prt(self):
print(self)
print(self.__class__)
t = test()
t.prt()
結果:<__main__.test object at 0x03337d70> #可以看出,self 代表的是類的例項,代表當前物件的位址
#self.class 則指向類
類的方法
在類的內部,使用 def 關鍵字來定義乙個方法,與一般函式定義不同,類方法必須包含引數 self, 且為第乙個引數,self 代表的是類的例項。
class animal:
name = ''
age = 0 #定義公有屬性
__weight=0 #定義私有屬性,私有屬性在類外部無法直接進行訪問
*** = ''
def __init__(self,n,a,w,s):
self.name=n
self.age=a
self.__weight=w
self.***=s
def __***(self)
return self.***
dog=animal('tom',3,35,'男')
print(dog.name,'今年',dog.age,'歲了')
print('tom體重是',dog.__weight,'kg') #私有屬性無法訪問
print('tom性別是',dog.__***) #私有方法無法訪問
結果: tom 今年 3 歲了
print('tom體重是',dog.__weight,'kg')
attributeerror: 'animal' object has no attribute '__weight' #嘗試訪問未知物件屬性,出現異常
print('tom性別是',dog.__***())
attributeerror: 'animal' object has no attribute '__***'
繼承
語法格式:
class derivedclassname(baseclassname1):
. .
baseclassname(示例中的基類名)必須與派生類定義在乙個作用域內。除了類,還可以用表示式,基類定義在另乙個模組中時這一點非常有用。
class people:
name = ''
age = 0
__weight = 0
def __init__(self,n,a,w):
self.name = n
self.age = a
self.__weight = w
def speak(self):
print("%s 說: 我 %d 歲。" %(self.name,self.age))
#單繼承示例
class student(people):
grade = ''
def __init__(self,n,a,w,g):
people.__init__(self,n,a,w) # 呼叫父類的構函
self.grade = g
def speak(self): # 覆寫父類的方法
print("%s 說: 我 %d 歲了,我在讀 %d 年級"%(self.name,self.age,self.grade))
s = student('ken',10,60,3)
s.speak()
結果:ken 說: 我 10 歲了,我在讀 3 年級
多繼承
語法格式:
class derivedclassname(base1, base2, base3):
. .
例項:
class people:
name = ''
age = 0
__weight = 0
def __init__(self,n,a,w):
self.name = n
self.age = a
self.__weight = w
def speak(self):
print("%s 說: 我 %d 歲。" %(self.name,self.age))
class speaker(): #另乙個類
topic = ''
name = ''
def __init__(self,n,t):
self.name = n
self.topic = t
def speak(self):
print("我叫 %s,我是乙個演說家,我演講的主題是 %s"%(self.name,self.topic))
class sample(speaker,people): #多重繼承
a =''
def __init__(self,n,a,w,t):
people.__init__(self,n,a,w) #呼叫父類
speaker.__init__(self,n,t)
test = sample("tim",25,80,"python")
test.speak() #方法名同,預設呼叫的是在括號中排前地父類的方法,即呼叫speaker中的speak方法,而不是people
結果:我叫 tim,我是乙個演說家,我演講的主題是 python
方法重寫
如果你的父類方法的功能不能滿足你的需求,你可以在子類重寫你父類的方法
class parent: # 定義父類
def mymethod(self):
print ('呼叫父類方法')
class child(parent): # 定義子類
def mymethod(self):
print ('呼叫子類方法')
c = child() # 子類例項
c.mymethod() # 子類呼叫重寫方法
super(child,c).mymethod() #用子類物件呼叫父類已被覆蓋的方法
結果:呼叫子類方法
呼叫父類方法
super() 函式是用於呼叫父類(超類)的乙個方法。 Python基礎學習 類與物件
班級 大佬類 小白類 抽象的概念 類的劃分標準 寫 的人來定 小王 大佬類裡面乙個具體的大佬 小花 小白類裡面乙個具體的小白 python類的語法 關鍵字class class 類名 類名的規範是數字字母下劃線組成,不能以數字開頭,首字母大寫 駝峰命名 類屬性 放在類裡面的變數值 類方法 寫在類裡面...
python的類與物件(day10)
定義類 class classname 類的幫助資訊 statement 在定義類時,如果沒有想好類的功能時,可用pass語句代替。建立類的例項 classname parameterlist classname 為必選引數,用於指定具體的類。後者為可選引數。init 該方法必須包含乙個self引數...
Python基礎 Thread類與執行緒物件
上一節學習了thread多執行緒的建立和管理 這一次學thread類與執行緒物件 thread構造方法的target關鍵字引數不僅僅可以是乙個函式,還可以是乙個物件,稱物件為執行緒物件。其實執行緒呼叫的仍是函式,只是這個函式用物件進行了封裝,這樣更符合物件導向程式設計的習慣。建立的類中必須含有 ca...