日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python3 面向对象编程_Python3基础-面向对象编程

發布時間:2024/8/1 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3 面向对象编程_Python3基础-面向对象编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

類的定義與實例化

語法格式如下:

classClassName:.

.

.

類:用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。

對象:?通過類定義的數據結構實例。對象包括兩個數據成員(類變量和實例變量)和方法。

實例

classstudent:

info_stu= "打印學生的信息" #公開變量 內部類或外部類使用 student.info_stu 訪問

empcount = 0 #公開變量 內部類或外部類使用 student.empCount 訪問

#該方法匯總對象產生之后自動執行,專門為對象進行初始化操作,可以有任意倒霉,但一定不能返回非None的值

def __init__(self,name,sex,age):

self.name=name

self.sex=sex

self.age=age

student.empcount+= 1

#self 代表類的實例,self 在定義類的方法時是必須有的,雖然在調用時不必傳入相應的參數。

definfo(self):print("我是info函數")return "姓名:%s, 性別:%s,年齡:%s"%(self.name,self.sex,self.age)defdisplaycount(self):print("Total empcount %d"%student.empcount)#實例化類

stu1 = student('susu','女','19') #每實例化一個student類就得到一個學生對象#調用類的過程成為將類實例化,拿到的返回值就是程序中的對象,或稱為一個實例

#訪問類的屬性和方法

print("student 類的屬性 info_stu為:",stu1.info_stu)print("student 類的方法 info為:",stu1.info())

self 代表類的實例,而非類

classtest:deftest1(self):print(self)print(self.__class__)#print(test.__dict__)

t=test()print(t)

t.test1()"""以上執行結果為

"""

self 代表的是類的實例,代表當前對象的地址,而?self.__class__?則指向類。

self 不是 python 關鍵字,我們把他換成 pselef 也是可以正常執行的

classtest:deftest1(pself):print(pself)print(pself.__class__)

t=test()

t.test1()"""以上執行結果為

"""

類對象

類對象支持兩種操作:屬性引用和實例化

類體的代碼在類定義階段執行,因而會產生新的名稱空間用來存放類中定義的名字,可以打印student.__dict__ 來查看這個容器盛放的東西

print(student.__dict__)

{'__module__': '__main__', 'info_stu': '打印學生的信息', '__init__': , 'info': , '__dict__': , '__weakref__': , '__doc__': None}

stu1=student('susu','女','19'),調用類會產生一個空對象stu1,然后將stu1連同調用類時括號內的參數一起傳給student.__init__('susu','女','19') 會產生對象的名稱空間,同樣可以用__dict__查看

print("stu1.__dict__",stu1.__dict__)

print("stu1:",stu1)"""執行結果

stu1.__dict__ {'name': 'susu', 'sex': '女', 'age': '19'}

stu1:<__main__.student object at>

"""

屬性訪問

類屬性與對象屬性

類的屬性:在類中定義的名字,都是類的屬性

類的屬性,分為兩種:

1、數據屬性:就是變量

2、函數屬性:就是函數,在面向對象稱為方法

注意:類和對象均用 . 來訪問自己的屬性

類屬性

print(student.info_stu) #student.__dict__['info_stu']

print(student.info) #student.__dict__['info']

執行結果如下:

打印學生的信息

對象屬性

print("student 類的屬性 info_stu為:",stu1.info_stu) # stu1.__dict__['name']

print("student 類的方法 info為:",stu1.info) #stu1.__dict__['info']

執行結果如下:

student 類的屬性 info_stu為: 打印學生的信息

student 類的方法 info為:>

內置屬性

print(student.__name__) #打印類名

print(student.__doc__) #打印類的文檔字符串

print(student.__bases__) #類的所有福利構成元素(包含了一個由所有父類組成的元祖)

print(student.__dict__) #類的屬性(包含一個字典,由類的數據屬性組成)

print(student.__module__) #類定義所在的模塊 (類的全名是'__main__.className',如果類位于一個導入模塊mymod中,那么className.__module__ 等于 mymod)

print(student.__class__) #類型

=======================================================================================================================================================

實例

classstudent:'學生的信息'info_stu= "打印學生的信息"empcount=0def __init__(self,name,sex,age):

self.name=name

self.sex=sex

self.age=age

student.empcount+= 1

#self 代表類的實例,self 在定義類的方法時是必須有的,雖然在調用時不必傳入相應的參數。

definfo(self):print("姓名:%s, 性別:%s,年齡:%s"%(self.name,self.sex,self.age))defdisplaycount(self):print("Total empcount %d"%student.empcount)#創建student 類的第一個對象

stu1 = student('susu','女','19')#創建student 類的第二個對象

stu2 = student('sush','男','29')

stu1.displaycount()

stu2.displaycount()

stu1.info()

stu2.info()print("Total empcount :",student.empcount)

完整實例

以上執行代碼執行輸出結果

Total empcount 2Total empcount2姓名:susu, 性別:女,年齡:19姓名:sush, 性別:男,年齡:29Total empcount :2

添加、刪除,修改類的屬性

stu1.grade = 3 #添加一個‘grade ’的屬性

stu1.grade =4 #修改‘grade ’的屬性

print(hasattr(stu1, 'grade')) #存在‘grade’屬性返回True

print(getattr(stu1, 'grade')) #獲取 ‘grade’的值

print(setattr(stu1, 'mark',77)) #添加屬性‘mark’ 值為77

print(getattr(stu1, 'mark')) #獲取 ‘mark’的值

print(delattr(stu1, 'mark')) #刪除屬性

delstu1.gradeprint(hasattr(stu1, 'grade')) #存在‘grade’屬性返回True

#在實例新增屬性后,并不會同步到類屬性里面

classstudent:

country='china'

def __init__(self,name):

self.name=namedefplay_ball(self,ball):print('%s 正在打 %s'%(self.name,ball))

p1=student('susu')print(p1.country)

p1.country= '日本'

print(p1.__dict__)print(student.__dict__)print('類的屬性---》',student.country)print('實例的屬性---》',p1.country)"""執行結果如下:

china

{'name': 'susu', 'country': '日本'}

{'__module__': '__main__', 'country': 'china', '__init__': , 'play_ball': , '__dict__': , '__weakref__': , '__doc__': None}

類的屬性---》 china

實例的屬性---》 日本"""

屬性查找順序與綁定方法

1、對象的名稱空間里只存放著對象獨有的屬性,而對象們相似的屬性是存放于類中

2、對象在訪問出現時,會優先從對象本身的__dict__中查找;未找到,則去類的__dict__中查找

1、類中的定義的變量是類的數據屬性,是共享給所有對象用的,指向相同的內存地址

#創建student 類的第一個對象

stu1 = student('susu','女','19')#創建student 類的第二個對象

stu2 = student('sush','男','29')#id 都一樣

print(id(student.empcount)) #265839808

print(id(stu1.empcount)) #265839808

print(id(stu2.empcount)) #265839808

2、類中定義的函數是類的函數屬性,類可以使用

#創建student 類的第一個對象

stu1 = student('susu','女','19')

#創建student 類的第二個對象

stu2 = student('sush','男','29')

#類的屬性

student.info(stu1) #輸出姓名:susu, 性別:女,年齡:19

student.info(stu2) #輸出 姓名:sush, 性別:男,年齡:29

類屬性、實例屬性與外部變量的作用域

country = 'china'

classstudent:def __init__(self,name):

self.name=nameprint('--->',country) #輸出外部變量country的值defplay_ball(self,ball):print('%s 正在打 %s'%(self.name,ball))

p1=student('susu')

以上代碼執行結果如下:

---> china

修改外部變量country的值 --情況1

country = 'china'

classstudent:print('未修改的country', country)

country= '日本'

print('修改后的country',country)def __init__(self,name):

self.name=name#print('--->',country)

defplay_ball(self,ball):print('%s 正在打 %s'%(self.name,ball))

p1=student('susu')print(student.__dict__)print(student.country)

以上執行結果如下:

未修改的country china

修改后的country 日本

{'__module__': '__main__', 'country': '日本', '__init__': , 'play_ball': , '__dict__': , '__weakref__': , '__doc__': None}

日本

修改外部變量country的值 --情況2

country = 'china'

classstudent:def __init__(self,name,country):

self.name=nameprint("__init__未修改的:", country) #輸出的是 china

self.country = '日本'

defplay_ball(self):print("未修改的:",country) #可輸出的是china

country = 1

#print("修改后的:", country)

p1=student('susu','china')print("p1.country",p1.country) #輸出的是 日本

print(country) #輸出的是 china

print(p1.play_ball())

以上代碼執行結果會出現報錯:

Traceback (most recent call last):

File"D:/pyAuto/pythonDay/pythonbase/classtest.py", line 151, in

print(p1.play_ball())

File"D:/pyAuto/pythonDay/pythonbase/classtest.py", line 143, inplay_ballprint("未修改的:",country) #可輸出的是china

UnboundLocalError: local variable 'country' referenced before assignment

python中出現了沒有聲明的變量 , py是通過如下簡單的規則找出變量的范圍 :如果函數內部有對變量的賦值 ,則該變量被認為是本地的,此時可以正常修改。但是若變量不定義在函數內部,且沒有進行變量范圍的聲明(去調用外部變量),程序在函數內部找不到相應變量,所以會出現未定義變量的錯誤提示消息

修改如下:

country = 'china'

classstudent:def __init__(self,name,country):

self.name=nameprint("__init__未修改的:", country) #輸出的是 china

self.country = '日本'

defplay_ball(self):globalcountryprint("未修改的:",country) #輸出的是china

country = 1

print("修改后的:", country) #輸出的是1

p1=student('susu','china')print("p1.country",p1.country) #輸出的是 日本

print(country) #輸出的是 china

p1.play_ball()print(country) #輸出的是 1

修改外部變量country的值 --情況3

country = 'china'

classstudent:

country= '日本'

def __init__(self,name):

self.name=nameprint("__init__未修改的:", country) #輸出的是 china

p1=student('susu')print("p1.country",p1.country) #輸出的是 日本、

"""以上代碼執行結果如下

__init__未修改的: china

p1.country 日本"""

#======要想在?__init__里面輸出類屬性 contry

country = 'china'

classstudent:

country= '日本'

def __init__(self,name):

self.name=nameprint("__init__未修改的:", country) #輸出的是 china

print("__init__未修改的:", student.country) #輸出的是 日本

p1=student('susu')print("p1.country",p1.country) #輸出的是 日本

"""__init__未修改的: china

__init__未修改的: 日本

p1.country 日本"""

總結

以上是生活随笔為你收集整理的python3 面向对象编程_Python3基础-面向对象编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。