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

歡迎訪問 生活随笔!

生活随笔

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

python

python 对象_Python小课堂面向对象

發布時間:2025/3/15 python 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 对象_Python小课堂面向对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python3 面向對象

Python從設計之初就已經是一門面向對象的語言,正因為如此,在Python中創建一個類和對象是很容易的。本章節我們將詳細介紹Python的面向對象編程。

如果你以前沒有接觸過面向對象的編程語言,那你可能需要先了解一些面向對象語言的一些基本特征,在頭腦里頭形成一個基本的面向對象的概念,這樣有助于你更容易的學習Python的面向對象編程。

接下來我們先來簡單的了解下面向對象的一些基本特征。

面向對象技術簡介

和其它編程語言相比,Python 在盡可能不增加新的語法和語義的情況下加入了類機制。

Python中的類提供了面向對象編程的所有基本功能:類的繼承機制允許多個基類,派生類可以覆蓋基類中的任何方法,方法中可以調用基類中的同名方法。

對象可以包含任意數量和類型的數據。

類定義

語法格式如下:

class ClassName:

?? ?.

.

?? ?.

類實例化后,可以使用其屬性,實際上,創建一個類之后,可以通過類名訪問其屬性。

類對象

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

屬性引用使用和 Python 中所有的屬性引用一樣的標準語法:obj.name。

類對象創建后,類命名空間中所有的命名都是有效屬性名。所以如果類定義是這樣:

#!/usr/bin/python3

class MyClass:

? ? """一個簡單的類實例"""

? ? i = 12345

? ? def f(self):

? ? ? ? return 'hello world'

# 實例化類

x = MyClass()

# 訪問類的屬性和方法

print("MyClass 類的屬性 i 為:", x.i)

print("MyClass 類的方法 f 輸出為:", x.f())

以上創建了一個新的類實例并將該對象賦給局部變量 x,x 為空的對象。

執行以上程序輸出結果為:

MyClass 類的屬性 i 為:12345

MyClass 類的方法 f 輸出為:hello world

類有一個名為 __init__() 的特殊方法(構造方法),該方法在類實例化時會自動調用,像下面這樣:

def __init__(self):

? ? self.data = []

類定義了 __init__() 方法,類的實例化操作會自動調用 __init__() 方法。如下實例化類 MyClass,對應的 __init__() 方法就會被調用:

x = MyClass()

當然, __init__() 方法可以有參數,參數通過 __init__() 傳遞到類的實例化操作上。例如:

#!/usr/bin/python3

class Complex:

? ? def __init__(self, realpart, imagpart):

? ? ? ? self.r = realpart

? ? ? ? self.i = imagpart

x = Complex(3.0, -4.5)

print(x.r, x.i)? ?# 輸出結果:3.0 -4.5

self代表類的實例,而非類

類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個參數名稱, 按照慣例它的名稱是 self。

class Test:

? ? def prt(self):

? ? ? ? print(self)

? ? ? ? print(self.__class__)

t = Test()

t.prt()

以上實例執行結果為:

__main__.Test

從執行結果可以很明顯的看出,self 代表的是類的實例,代表當前對象的地址,而 self.class 則指向類。

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

class Test:

? ? def prt(runoob):

? ? ? ? print(runoob)

? ? ? ? print(runoob.__class__)

t = Test()

t.prt()

以上實例執行結果為:

__main__.Test

類的方法

在類的內部,使用 def 關鍵字來定義一個方法,與一般函數定義不同,類方法必須包含參數 self, 且為第一個參數,self 代表的是類的實例。

#!/usr/bin/python3

#類定義

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))

# 實例化類

p = people('runoob',10,30)

p.speak()

執行以上程序輸出結果為:

runoob 說: 我 10 歲。

繼承

Python 同樣支持類的繼承,如果一種語言不支持繼承,類就沒有什么意義。派生類的定義如下所示:

class DerivedClassName(BaseClassName1):

? ? .

? ? .

? ? .

BaseClassName(示例中的基類名)必須與派生類定義在一個作用域內。除了類,還可以用表達式,基類定義在另一個模塊中時這一點非常有用:

class DerivedClassName

(modname.BaseClassName):

實例如下:

#!/usr/bin/python3

#類定義

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 年級

多繼承

Python同樣有限的支持多繼承形式。多繼承的類定義形如下例:

class DerivedClassName(Base1, Base2, Base3):

? ? .

? ? .

? ? .

需要注意圓括號中父類的順序,若是父類中有相同的方法名,而在子類使用時未指定,python從左至右搜索 即方法在子類中未找到時,從左到右查找父類中是否包含方法。

#!/usr/bin/python3

#類定義

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))

#另一個類,多重繼承之前的準備

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,student):

? ? a =''

? ? def __init__(self,n,a,w,g,t):

? ? ? ? student.__init__(self,n,a,w,g)

? ? ? ? speaker.__init__(self,n,t)

test = sample("Tim",25,80,4,"Python")

test.speak()? ?#方法名同,默認調用的是在括號中排前地父類的方法

執行以上程序輸出結果為:

我叫 Tim,我是一個演說家,我演講的主題是 Python

方法重寫

如果你的父類方法的功能不能滿足你的需求,你可以在子類重寫你父類的方法,實例如下:

#!/usr/bin/python3

class Parent:? ? ? ? # 定義父類

? ?def myMethod(self):

? ? ? print ('調用父類方法')

class Child(Parent): # 定義子類

? ?def myMethod(self):

? ? ? print ('調用子類方法')

c = Child()? ? ? ? ? # 子類實例

c.myMethod()? ? ? ? ?# 子類調用重寫方法

super(Child,c).myMethod() #用子類對象調用父類已被覆蓋的方法

super()函數是用于調用父類(超類)的一個方法。執行以上程序輸出結果為:

調用子類方法

調用父類方法

更多文檔:

“python子類繼承父類構造函數說明”點擊“閱讀原文”獲取。

類屬性與方法

1.類的私有屬性

__private_attrs:兩個下劃線開頭,聲明該屬性為私有,不能在類的外部被使用或直接訪問。在類內部的方法中使用時 self.__private_attrs。

2.類的方法

在類的內部,使用 def 關鍵字來定義一個方法,與一般函數定義不同,類方法必須包含參數 self,且為第一個參數,self 代表的是類的實例。

self 的名字并不是規定死的,也可以使用 this,但是最好還是按照約定是用 self。

3.類的私有方法

__private_method:兩個下劃線開頭,聲明該方法為私有方法,只能在類的內部調用 ,不能在類的外部調用。self.__private_methods。

4.實例

類的私有屬性實例如下:

#!/usr/bin/python3

class JustCounter:

? ? __secretCount = 0? # 私有變量

? ? publicCount = 0? ? # 公開變量

? ? def count(self):

? ? ? ? self.__secretCount += 1

? ? ? ? self.publicCount += 1

? ? ? ? print (self.__secretCount)

counter = JustCounter()

counter.count()

counter.count()

print (counter.publicCount)

print (counter.__secretCount)? # 報錯,實例不能訪問私有變量

執行以上程序輸出結果為:

1

2

2

Traceback (most recent call last):

? File "test.py", line 16, in

? ? print (counter.__secretCount)? # 報錯,實例不能訪問私有變量

AttributeError: 'JustCounter' object has no attribute '__secretCount'

類的私有方法實例如下:

#!/usr/bin/python3

class Site:

? ? def __init__(self, name, url):

? ? ? ? self.name = name? ? ? ?# public

? ? ? ? self.__url = url? ?# private

? ? def who(self):

? ? ? ? print('name? : ', self.name)

? ? ? ? print('url : ', self.__url)

? ? def __foo(self):? ? ? ? ? # 私有方法

? ? ? ? print('這是私有方法')

? ? def foo(self):? ? ? ? ? ? # 公共方法

? ? ? ? print('這是公共方法')

? ? ? ? self.__foo()

x = Site('菜鳥教程', 'www.runoob.com')

x.who()? ? ? ? # 正常輸出

x.foo()? ? ? ? # 正常輸出

x.__foo()? ? ? # 報錯

以上實例執行結果:

5.類的專有方法

6.運算符重載

Python同樣支持運算符重載,我們可以對類的專有方法進行重載,實例如下:

#!/usr/bin/python3

class Vector:

? ?def __init__(self, a, b):

? ? ? self.a = a

? ? ? self.b = b

? ?def __str__(self):

? ? ? return 'Vector (%d, %d)' % (self.a, self.b)

? ?def __add__(self,other):

? ? ? return Vector(self.a + other.a, self.b + other.b)

v1 = Vector(2,10)

v2 = Vector(5,-2)

print (v1 + v2)

以上代碼執行結果如下所示:

Vector(7,8)

?Python小課堂?

?每周一見?

來源:菜鳥教程

排版:張立成

責任編輯:章慧群? ?微信審核:劉婷

總結

以上是生活随笔為你收集整理的python 对象_Python小课堂面向对象的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 美女四肢被绑在床扒衣 | 亚洲福利在线播放 | 香蕉色网 | 天天摸天天看 | 麻豆av网址 | 久久久久久无码午夜精品直播 | 午夜影院啊啊啊 | 伊人久久中文 | 久久看片| 被两个男人吃奶三p爽文 | a毛毛片 | 精品免费一区二区 | av黄色在线观看 | 欧美精品午夜 | 思思99精品视频在线观看 | 久久久久亚洲AV成人网人人小说 | 男女男精品网站 | 成人黄网免费观看视频 | 动漫av网站免费观看 | 特大黑人娇小亚洲女mp4 | 熟女高潮一区二区三区 | 日本黄网免费 | 日韩簧片在线观看 | 亚洲亚洲人成综合网络 | 亚洲日本一区二区 | 插入综合网 | 777色婷婷 | 激情六月综合 | 成人免费aaa | 久草网视频在线观看 | 一道本在线观看视频 | 久久精品视频免费看 | 色网站入口 | 第一毛片 | 男人的天堂在线视频 | 波多野结衣三级视频 | 成人开心激情 | 狠狠干2020 | 久久久久久久久久久久国产 | 欧美超碰在线 | 国产精品不卡av | 欧美男优 | 九九色九九 | www.在线观看网站 | 日本v视频 | 国产精品情侣呻吟对白视频 | 久久久久久久久久99精品 | 涩久久| 国产欧美一区二区三区视频 | 亚洲精品中文字幕在线播放 | aa丁香综合激情 | 天天干干干 | 丰腴饱满的极品熟妇 | 日本免费在线 | 91国产精品一区 | 黄色在线视频观看 | 成人免费做受小说 | 最近中文字幕av | 亚洲欧洲综合在线 | 国产一卡二卡三卡 | 综合激情久久 | 亚洲九九色 | 色妞色视频一区二区三区四区 | 亚洲精品aaaaa | 根深蒂固在线观看 | 午夜精品亚洲 | 国产麻豆成人传媒免费观看 | 欧美怡红院视频一区二区三区 | 男人的天堂毛片 | 天天爱天天操 | jizzjizz8| 欧美日韩在线免费观看 | 十八禁毛片 | 成人久久久久 | 亚洲精品天堂成人片av在线播放 | 在线观看av网页 | 欧美综合色区 | 欧美bbbbbbbbbbbb1 麻豆精品av | 天天激情 | 伊人春色在线观看 | 免费在线成人网 | 亚洲啪啪网 | 日本xxxx色| 成人性做爰aaa片免费 | √8天堂资源地址中文在线 欧美精品在线一区二区 | 2020国产精品| 在线观看成人免费视频 | 欧美成在线视频 | 神马三级我不卡 | 中国老妇性视频 | 国产一区二区三区四区精 | 最全aⅴ番号库 | 日韩综合在线 | 亚洲免费自拍 | 欧美成人一区二区三区四区 | 欧美极品少妇 | 日本三级免费看 | av污 | 青青草国产成人av片免费 |