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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python类

發(fā)布時(shí)間:2023/12/10 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python类 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一,類

1,類是摸板,里面有組合數(shù)據(jù),實(shí)現(xiàn)功能的方法。
2,類里面有可以改變自身的方法__init__函數(shù)
3,類和模塊類似,運(yùn)行時(shí)創(chuàng)建,創(chuàng)建后修改
4,類成員通常是public,成員函數(shù)virtual
5,python提供的內(nèi)置類型類,可以作為父類來繼承

二,類為模板

1,屬性引用
Moduel_Name.func_name 對(duì)模塊中名稱的引用稱為屬性引用。
Moduel_Name 是一個(gè)模塊對(duì)象,fun_name是它的屬性。
模塊的屬性和模塊中定義的全局名稱之間存在映射關(guān)系:它們共享一個(gè)命名空間!

2 ,屬性
可以只讀或者只寫,如果可寫,模塊的屬性可以賦值,可以刪除
Moduel_Name.var = 10
del Moduel_Name.var 會(huì)從Moduel_Name對(duì)象中移除var屬性

3,類里面定義的變量

  • 類里面定義函數(shù)
>>> class MyClass:... def say_hello(): # 標(biāo)準(zhǔn)是帶self的參數(shù)... print('hello world!')...>>> MyClass<class '__main__.MyClass'>>>> MyClass.say_hello() # 屬性引用hello world!>>>

類里面函數(shù)可能還有self 的參數(shù)
一個(gè)類(全局命名空間)里面的作用域是局部作用域
通過創(chuàng)建對(duì)象使得類里面的局部作用域生效

  • 一個(gè)有屬性,函數(shù)的類demo
class MyClass:''' 這是一個(gè)py類的annotation '''# 類的屬性i = 99# 類的初始化方法def __init__(self):self.data = []# 類的自定義函數(shù) def say_hello(self):return 'hello world'

4,類對(duì)象

  • 訪問類里面的元素有兩種方法:屬性引用和實(shí)例化

  • 屬性引用:

MyClass.var
  • 實(shí)例化
    類的實(shí)例使用函數(shù)表示法
x = MyClass()
  • 類的構(gòu)造方法
class Test:def __init__(self):print('這是py類的構(gòu)造方法,用來初始化這個(gè)類')def __init__(self, name):print(name)''' 當(dāng)一個(gè)類定義了 __init__() 方法時(shí),類的實(shí)例化操作(t = Test('rye'))自動(dòng)為新創(chuàng)建的類實(shí)例發(fā)起調(diào)用 __init__()。兩個(gè)init會(huì)被調(diào)用。只是第一個(gè)__init__會(huì)被覆蓋。'''
  • init里面的局部名稱屬于實(shí)例對(duì)象
class MyClass:''' 這是一個(gè)py類 有兩個(gè)init初始化類的方法,創(chuàng)建類后所有init里面的局部變量就會(huì)存在__init__self后面參數(shù)沒被賦值就是None'''i = 99def __init__(self):self.data = []def __init__(self, count): # 第二個(gè)__init__覆蓋第一個(gè)self.c = countdef say_hello(self):return 'hello world'# !上面的類要實(shí)例化時(shí),注意傳入?yún)?shù),按照__init__的self后面是否有其它參數(shù)。''' MyClass.c 這樣訪問時(shí)錯(cuò)誤的,c輸入實(shí)例對(duì)象。 '''

5,實(shí)例對(duì)象 ==> 自定義對(duì)象產(chǎn)生的

  • 實(shí)例對(duì)象的操作是屬性引用(數(shù)據(jù)屬性和方法)
  • 數(shù)據(jù)屬性不需要在類里面聲明,像局部變量一樣,第一次賦值時(shí)產(chǎn)生。
  • 數(shù)據(jù)屬性可以根據(jù)類對(duì)象無中生有
  • counter就是實(shí)例對(duì)象的屬性引用
# 接著上面的類 me = MyClass(None) def my_obj():me.counter = 0while me.counter < 20:me.counter += 1print(me.counter)my_obj() # del me.counter 不刪除就會(huì)存在
  • 實(shí)例方法,是類對(duì)象調(diào)用類的函數(shù)
Me = MyClass(None)Me.say_hello() 就是一個(gè)方法對(duì)象而MyClass.say_hello(None) 就是一個(gè)函數(shù)對(duì)象

6, 方法對(duì)象

me = MyClass(None) # 方法對(duì)象 def test_func_obj():val = me.say_hello() # 用實(shí)例對(duì)象調(diào)用類的函數(shù)while True:print(val) test_func_obj()print("me.say_hello()相當(dāng)于 MyClass.say_hello(me)")

?注意

  • 方法的特殊之處就在于實(shí)例對(duì)象會(huì)作為函數(shù)的第一個(gè)參數(shù)被傳入。 實(shí)例對(duì)象取代了self。
  • 總之,調(diào)用一個(gè)具有 n 個(gè)參數(shù)的方法就相當(dāng)于調(diào)用再多一個(gè)參數(shù)的對(duì)應(yīng)函數(shù), 這個(gè)參數(shù)值為方法所屬實(shí)例對(duì)象,位置在其他參數(shù)之前。

7,類和實(shí)例變量

  • 類對(duì)象的屬性,函數(shù)屬于所有對(duì)象 self屬于某個(gè)對(duì)象。
# 類和實(shí)例變量 class Dog:name = 'kid'def __init__(self, color):self.color = color# 實(shí)例變量屬于對(duì)象,類變量被對(duì)象共享 d1 = Dog('black') d2 = Dog('yellow') print(d1.name, d1.color, '\n', d2.name, d2.color) ''' kid blackkid yellow '''# color是每個(gè)對(duì)象具有的,name被共享d1.name = 'jack' print(d1.name, d1.color, '\n', d2.name, d2.color) ''' 改變類變量后, jack black kid yellow '''
  • 用__init__來解決類變量共享
# 類變量的錯(cuò)誤設(shè)計(jì),不該出現(xiàn)數(shù)據(jù)共享 class Dog:tricks = []def __init__(self, name):self.name = namedef add_trick(self, trick):self.tricks.append(trick)d = Dog('d1') dd = Dog('d2') d.add_trick('jump!') dd.add_trick('roll!') print(d.tricks) print(dd.tricks) ''' ['jump!', 'roll!'] 兩只狗都會(huì)了['jump!', 'roll!'] '''# 正解 class Dog():def __init__(self, name):self.name = nameself.tricks = [] # 屬于每個(gè)對(duì)象,是單獨(dú)的def add_trick(self, trick):self.tricks.append(trick)d = Dog('d1') dd = Dog('d2') d.add_trick('jump!') dd.add_trick('roll!') print(d.tricks) print(dd.tricks) ''' ['jump!'] ['roll!'] '''

有點(diǎn)懵,但還好,會(huì)用了。

總結(jié)

以上是生活随笔為你收集整理的python类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。