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

歡迎訪問 生活随笔!

生活随笔

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

python

Python 面向对象【1】

發布時間:2023/12/13 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 面向对象【1】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對象 = 屬性 + 方法 面向對象特征:
分裝 繼承 多態【不同對象對同一方法響應不同行動】 類定義 class xxx: .... .... 類對象

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

屬性引用 使用和 Python 中所有的屬性引用一樣的標準語法:類對象名.屬性名

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

?

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__() 傳遞到類的實例化操作上。例如:

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 instance at 0x100771878> __main__.Test

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

?

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

class Test:   def prt(xxx):     print(xxx)      print(xxx.__class__) t = Test() t.prt()

以上實例執行結果為:

<__main__.Test instance at 0x100771878> __main__.Test
類的方法

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


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('jike',10,30) ? ? 【類的實例化操作會自動調用 __init__() 方法
p.speak()

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

jike 說: 10 歲。 繼承 class xxx(父類名): .... ....

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

即方法在子類中未找到時,從左到右查找基類中是否包含方法。

?

父類必須與派生類定義在一個作用域內。類定義在另一個模塊中時還可以用表達式

class 派生類名(模塊名.父類名):

?舉例

?

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

ken 說: 10 歲了,我在讀 3 年級



多繼承

class 派生類名(Base1, Base2, Base3): .... ...  

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

即方法在子類中未找到時,從左到右查找父類中是否包含方法。

輸出:

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

?

?

方法重寫

?

子類繼承父類構造函數說明 類屬性與方法

類的私有屬性【不能在外部調用】

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

類的方法

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

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

類的私有方法【不能在外部調用】

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

類的專有方法:

  • __init__ : 構造函數,在生成對象時調用
  • __del__ : 析構函數,釋放對象時使用
  • __repr__ : 打印,轉換
  • __setitem__ : 按照索引賦值
  • __getitem__: 按照索引獲取值
  • __len__: 獲得長度
  • __cmp__: 比較運算
  • __call__: 函數調用
  • __add__: 加運算
  • __sub__: 減運算
  • __mul__: 乘運算
  • __truediv__: 除運算
  • __mod__: 求余運算
  • __pow__: 乘方
?另外 # 針對__str__方法的例子:

?

# 各種運算符重載

反向運算符重載:

  • __radd__:?加運算
  • __rsub__:?減運算
  • __rmul__:?乘運算
  • __rdiv__:?除運算
  • __rmod__:?求余運算
  • __rpow__:?乘方

復合重載運算符:

  • __iadd__:?加運算
  • __isub__:?減運算
  • __imul__:?乘運算
  • __idiv__:?除運算
  • __imod__:?求余運算
  • __ipow__:?乘方
?舉例:

#?關于 __name__

#?類的靜態方法、普通方法、類方法

?

?

pass ---占位符,表示稍后輸入
如果子類定義與父類同名的方法或屬性,會自動覆蓋父類的方法或屬性 子類覆蓋父類方法時,若需要父類中該方法中的屬性,則要先調用父類該方法,獲得所需要的屬性,再重寫
1.調用未綁定的父類方法
該重寫方法第一行: 父類名.xxxx(self ---將子類對象傳入)
2.使用super函數
super().父類方法名() ---不需要給定任何父類的名字,自動一層層找出 默認要求,類定義中,方法的第一個參數是self == this,表示不同對象調用該方法時,傳入一個該對象參數,用以區別誰調用此方法 構造方法:_init_(self) ---構造方法,實例化對象的時候會自動調用它,默認參數形式如上,此時不需要實例化的時候給與參數,,,,_init_(self,name) ---此時需要給個參數 xx=Yy(zz)
可以重寫此方法自定義初始化操作

轉載于:https://www.cnblogs.com/expedition/p/10693091.html

總結

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

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