1、Python3 面向對象
1)類(Class): 用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。
2)方法:類中定義的函數。
3)類變量:類變量在整個實例化的對象中是公用的。類變量定義在類中且在函數體之外。類變量通常不作爲實例變量使用。
4)數據成員:類變量或者實例變量用於處理類及其實例對象的相關的數據。
5)方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱爲方法的重寫。
6)局部變量:定義在方法中的變量,只作用於當前實例的類。
7)實例變量:在類的聲明中,屬性是用變量來表示的,這種變量就稱爲實例變量,實例變量就是一個用 self 修飾的變量。
8)繼承:即一個派生類(derived class)繼承基類(base class)的字段和方法。繼承也允許把一個派生類的對象作爲一個基類對象對待。
例如,有這樣一個設計:一個Dog類型的對象派生自Animal類,這是模擬"是一個(is-a)"關係(例圖,Dog是一個Animal)。
9)實例化:創建一個類的實例,類的具體對象。
10)對象:通過類定義的數據結構實例。對象包括兩個數據成員(類變量和實例變量)和方法。
2、類定義
語法格式如下:
class ClassName:
<statement-1>
.
.
.
<statement-N>
3、類對象
類對象支持兩種操作:屬性引用和實例化。
屬性引用使用和 Python 中所有的屬性引用一樣的標準語法:obj.name。
類對象創建後,類命名空間中所有的命名都是有效屬性名
class Dog:
#定義基本屬性
name = '' # 狗的名稱
color = '' # 狗的顏色
#兩個下劃線開頭 定義私有屬性,私有屬性在類外部無法直接進行訪問
__kind = '' # 狗的品種
#構造方法
def __init__(self,name,color,kind):
self.name = name
self.color = color
self.kind = kind
#打印信息
def printInfo(self):
print('狗的品種是:',self.kind)
4、繼承
語法格式:
class DerivedClassName(BaseClassName1):
<statement-1>
.
.
.
<statement-N>
1)需要注意圓括號中基類的順序,若是基類中有相同的方法名,而在子類使用時未指定,python從左至右搜索
即方法在子類中未找到時,從左到右查找基類中是否包含方法。2)BaseClassName(示例中的基類名)必須與派生類定義在一個作用域內。除了類,還可以用表達式,
基類定義在另一個模塊中時這一點非常有用
class SubDog(Dog):
price = .0 #狗的價格
#初始化
def __init__(self,name,color,kind,price):
Dog.__init__(self,name,color,kind)
self.price = price
#覆寫父類方法(重寫)
def printInfo(self):
print('狗的品種是:',self.kind,',價格爲',self.price)
5、多繼承
語法格式:
class DerivedClassName(Base1, Base2, Base3):
<statement-1>
.
.
.
<statement-N>
注意:
儘量避免使用多繼承,因爲父類有相同的變量和方法,則會按照繼承的順序,
從左到右依次匹配相應的變量和方法,導致獲取的不是自己想要的
#參加跳舞比賽
class Dance():
danceName = '' #舞蹈名稱
sort = 0 #舞蹈獲取的名次
#初始化
def __init__(self,name,sort):
self.danceName = name
self.sort = sort
#比賽結果
def result(self):
print('我參加比賽的舞蹈名爲: %s,獲得第%s名'%(self.danceName,1))
#多繼承
class SpeakDog(SubDog,Dance):
isSpeak = False
def __init__(self,name,color,kind,price,danceName,sort,isSpeak):
SubDog.__init__(self,name,color,kind,price)
Dance.__init__(self,danceName,sort)
self.isSpeak = isSpeak
def printInfo(self):
if self.isSpeak:
print('%s是一隻會叫的狗' % self.name)
else:
print('%s是一隻不會叫的狗' % self.name)
6、類屬性與方法
1)類的私有屬性
__private_attrs:兩個下劃線開頭,聲明該屬性爲私有,不能在類的外部被使用或直接訪問。在類內部的方法中使用時 self.__private_attrs。2)類的方法
在類的內部,使用 def 關鍵字來定義一個方法,與一般函數定義不同,類方法必須包含參數 self,
且爲第一個參數,self 代表的是類的實例。
self 的名字並不是規定死的,也可以使用 this,但是最好還是按照約定是用 self。3)類的私有方法
__private_method:兩個下劃線開頭,聲明該方法爲私有方法,只能在類的內部調用 ,不能在類的外部調用。self.__private_methods
#類的私有屬性實例
class CounterTest:
__secretCount = 0 # 私有變量
publicCount = 0 # 公開變量
def count(self): # 公共方法
self.__secretCount += 1
self.publicCount += 1
print('這是公共方法,私有變量__secretCount的值爲:',self.__secretCount)
def __addNum(self,a,b): # 私有方法
return a+b
counter = CounterTest()
counter.count()
print('公有變量publicCount的值爲:',counter.publicCount)
# print(counter.__secretCount) # 報錯,實例不能訪問私有變量
#程序入口
if __name__ == '__main__':
# 實例化類
dog = Dog('小黑','黑色','哈士奇')
print(dog.name, dog.color, dog.kind)
subDog = SubDog('小布丁','棕色','泰迪',1239.2)
subDog.printInfo() #子類調用重寫方法
print("調用父類重寫的方法:",end='')
super(SubDog,subDog).printInfo() #用子類對象調用父類已被覆蓋的方法
speakdog = SpeakDog('小布丁','棕色','泰迪',1239.2,'恭喜發財',1,True)
speakdog.printInfo()
speakdog.result()
7、給各位大佬奉茶
測試筆記
#1、Python3 面向對象
print()
print('1、Python3 面向對象')
'''
1)類(Class): 用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。
2)方法:類中定義的函數。
3)類變量:類變量在整個實例化的對象中是公用的。類變量定義在類中且在函數體之外。類變量通常不作爲實例變量使用。
4)數據成員:類變量或者實例變量用於處理類及其實例對象的相關的數據。
5)方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱爲方法的重寫。
6)局部變量:定義在方法中的變量,只作用於當前實例的類。
7)實例變量:在類的聲明中,屬性是用變量來表示的,這種變量就稱爲實例變量,實例變量就是一個用 self 修飾的變量。
8)繼承:即一個派生類(derived class)繼承基類(base class)的字段和方法。繼承也允許把一個派生類的對象作爲一個基類對象對待。
例如,有這樣一個設計:一個Dog類型的對象派生自Animal類,這是模擬"是一個(is-a)"關係(例圖,Dog是一個Animal)。
9)實例化:創建一個類的實例,類的具體對象。
10)對象:通過類定義的數據結構實例。對象包括兩個數據成員(類變量和實例變量)和方法。
'''
# 2、類定義
print()
print('2、類定義')
'''
語法格式如下:
class ClassName:
<statement-1>
.
.
.
<statement-N>
'''
# 3、類對象
print()
print('3、類對象')
'''
類對象支持兩種操作:屬性引用和實例化。
屬性引用使用和 Python 中所有的屬性引用一樣的標準語法:obj.name。
類對象創建後,類命名空間中所有的命名都是有效屬性名
'''
class Dog:
#定義基本屬性
name = '' # 狗的名稱
color = '' # 狗的顏色
#兩個下劃線開頭 定義私有屬性,私有屬性在類外部無法直接進行訪問
__kind = '' # 狗的品種
#構造方法
def __init__(self,name,color,kind):
self.name = name
self.color = color
self.kind = kind
#打印信息
def printInfo(self):
print('狗的品種是:',self.kind)
# 4、繼承
'''
語法格式:
class DerivedClassName(BaseClassName1):
<statement-1>
.
.
.
<statement-N>
1)需要注意圓括號中基類的順序,若是基類中有相同的方法名,而在子類使用時未指定,python從左至右搜索
即方法在子類中未找到時,從左到右查找基類中是否包含方法。
2)BaseClassName(示例中的基類名)必須與派生類定義在一個作用域內。除了類,還可以用表達式,
基類定義在另一個模塊中時這一點非常有用
'''
class SubDog(Dog):
price = .0 #狗的價格
#初始化
def __init__(self,name,color,kind,price):
Dog.__init__(self,name,color,kind)
self.price = price
#覆寫父類方法(重寫)
def printInfo(self):
print('狗的品種是:',self.kind,',價格爲',self.price)
#5、多繼承
'''
語法格式:
class DerivedClassName(Base1, Base2, Base3):
<statement-1>
.
.
.
<statement-N>
注意:
儘量避免使用多繼承,因爲父類有相同的變量和方法,則會按照繼承的順序,
從左到右依次匹配相應的變量和方法,導致獲取的不是自己想要的
'''
#參加跳舞比賽
class Dance():
danceName = '' #舞蹈名稱
sort = 0 #舞蹈獲取的名次
#初始化
def __init__(self,name,sort):
self.danceName = name
self.sort = sort
#比賽結果
def result(self):
print('我參加比賽的舞蹈名爲: %s,獲得第%s名'%(self.danceName,1))
#多繼承
class SpeakDog(SubDog,Dance):
isSpeak = False
def __init__(self,name,color,kind,price,danceName,sort,isSpeak):
SubDog.__init__(self,name,color,kind,price)
Dance.__init__(self,danceName,sort)
self.isSpeak = isSpeak
def printInfo(self):
if self.isSpeak:
print('%s是一隻會叫的狗' % self.name)
else:
print('%s是一隻不會叫的狗' % self.name)
#6、類屬性與方法
'''
1)類的私有屬性
__private_attrs:兩個下劃線開頭,聲明該屬性爲私有,不能在類的外部被使用或直接訪問。在類內部的方法中使用時 self.__private_attrs。
2)類的方法
在類的內部,使用 def 關鍵字來定義一個方法,與一般函數定義不同,類方法必須包含參數 self,
且爲第一個參數,self 代表的是類的實例。
self 的名字並不是規定死的,也可以使用 this,但是最好還是按照約定是用 self。
3)類的私有方法
__private_method:兩個下劃線開頭,聲明該方法爲私有方法,只能在類的內部調用 ,不能在類的外部調用。self.__private_methods
'''
#類的私有屬性實例
class CounterTest:
__secretCount = 0 # 私有變量
publicCount = 0 # 公開變量
def count(self): # 公共方法
self.__secretCount += 1
self.publicCount += 1
print('這是公共方法,私有變量__secretCount的值爲:',self.__secretCount)
def __addNum(self,a,b): # 私有方法
return a+b
counter = CounterTest()
counter.count()
print('公有變量publicCount的值爲:',counter.publicCount)
# print(counter.__secretCount) # 報錯,實例不能訪問私有變量
#程序入口
if __name__ == '__main__':
# 實例化類
dog = Dog('小黑','黑色','哈士奇')
print(dog.name, dog.color, dog.kind)
subDog = SubDog('小布丁','棕色','泰迪',1239.2)
subDog.printInfo() #子類調用重寫方法
print("調用父類重寫的方法:",end='')
super(SubDog,subDog).printInfo() #用子類對象調用父類已被覆蓋的方法
speakdog = SpeakDog('小布丁','棕色','泰迪',1239.2,'恭喜發財',1,True)
speakdog.printInfo()
speakdog.result()
結果:
C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\python.exe F:/python-space/test/ObjectStudy.py
1、Python3 面向對象
2、類定義
3、類對象
這是公共方法,私有變量__secretCount的值爲: 1
公有變量publicCount的值爲: 1
小黑 黑色 哈士奇
狗的品種是: 泰迪 ,價格爲 1239.2
調用父類重寫的方法:狗的品種是: 泰迪
小布丁是一隻會叫的狗
我參加比賽的舞蹈名爲: 恭喜發財,獲得第1名
Process finished with exit code 0