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

歡迎訪問 生活随笔!

生活随笔

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

python

python寒假培训第二课

發布時間:2024/1/8 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python寒假培训第二课 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

super()函數

Python3中可以使用super()替代super().init()

作用:在子類中調用父類的方法進行使用

a.單繼承(只繼承一個父類,父類沒有繼承其他類)

class A(object):def __init__(self):print('i am class A')class C(A):def __init__(self):super(C, self).__init__() # super(C self).init() 這句話的解釋是: #C是類,self是C的一個實例,super把self轉化為父類A的一個實例對象,然后去使用init()方法print('yes')c = C()

b.多重繼承(父類也是繼承了對象的類的)

class A(object):def __init__(self):print('i am class A')class B(A):def __init__(self):super(B, self).__init__()print('i am class B')class C(B):def __init__(self):super(C, self).__init__()print('yes')c = C()# 這里每一級super函數只是調用上一級的父類函數而已,所以C調用的是B的init函數,然后如果B的類里面也# 調用了A的init函數,就會先執行,

c.多繼承(繼承多個單獨的類,不是多級的關系)

class A(object):def __init__(self):print('i am class A')def foo(self):print('i am another A')class B():def __init__(self):print('i am class B')def foo(self):print('i am another B')class C(A,B):def __init__(self):super(C, self).__init__()print('yes')c = C() c.foo()#結果是繼承了A的屬性,然后調用時先調用了A的函數,然后使用實例調用foo函數,打印出來的也是A的foo #如果我們寫成class C(B,A)則會先調用B的屬性

?參考的連接:(44條消息) Python3中的super函數_技術最差的的博客-CSDN博客_python3 super

(44條消息) Python中的super()用法_半遮雨的博客-CSDN博客_python super

property() 函數

作用:在新式類中返回屬性值。

語法:? class property([fget[, fset[, fdel[, doc]]]])

  • fget -- 獲取屬性值的函數
  • fset -- 設置屬性值的函數
  • fdel -- 刪除屬性值函數
  • doc -- 屬性描述信息

使用方式:

a. 裝飾器:在方法上應用裝飾器

b. 類屬性: 在類中定義值為 property 對象的類屬性

可參考的教程?Python property() 函數 | 菜鳥教程 (runoob.com)

Python面向對象提升與收發郵件_嗶哩嗶哩_bilibili?p5

裝飾器 使用例子 :

該類的屬性有三種訪問方式,并分別對應三個被 @property、@方法名.setter、@方法名.deleter 修飾的方法,這三個方法對同一個屬性:獲取,修改,刪除

class Money:def __init__(self):self._money = 0@propertydef money(self):return self._money@money.setterdef money(self, value):self._money = value@money.deleterdef money(self):print('我沒錢了')del self._moneydollar = Money() m = dollar.money # 獲取,dollar.money 在調用時沒有() print(m) dollar.money = 10000000 # 修改 m = dollar.money print(m) del dollar.money # 刪除

類屬性方式使用例子:

如果?c?是類?C?的實例化, c.x 將觸發 getter,c.x = value 將觸發 setter , del c.x 觸發 deleter。

class Money:def __init__(self):self._money = 0def get_money(self):return self._moneydef setter_money(self, value):self._money = valuedef deleter_money(self):print('我沒錢了')del self._moneymoney = property(get_money, setter_money, deleter_money)dollar = Money() m = dollar.money print(m) dollar.money = 100000000 m = dollar.money print(m) del dollar.money

動態添加方法和屬性

動態添加屬性: 對象名.屬性名

動態添加實例方法:引入 from types import MethodType,

MethodType第一個參數是函數本身,第二個是調用函數時,傳給方法的第一個參數

更詳細的講解參考鏈接(44條消息) 【Python】 如何動態添加類屬性與方法_本末實驗室-CSDN博客_python添加類屬性

一個B站博主舉的例子:

from types import MethodType# 創建一個空類(即沒有屬性和方法) class Person(object):__slots__ = ("name","age","speak")per = Person() # 動態添加屬性,這體現了動態語言的特點靈活性 per.name = "aa" print(per.name)# 動態添加方法 def say(self):print("My name is" +self.name) per.speak=MethodType(say, per) #調用say方法時默認per傳入 per.speak()#如果想要限制實例的屬性,例如只允許給對象添加 name age 屬性 # 解決:需要在定義類時,定義一個特殊的屬性(__solt__)來限制動態添加的屬性

培訓作業1:動態給類添加方法,對貓的類中沒有設置奔跑的方法,在類外添加這個方法,并打印

# 引入MethodType以便動態給類添加方法 from types import MethodType# 創建一個貓類(設為空類,即沒有屬性和方法) class Cat(object):def __init__(self, name, way):self.name = nameself.way = way# 實例化對象 c = Cat('大橘', '快速奔跑')# 動態添加年齡屬性,使用對象名.屬性名添加,這體現了動態語言的特點靈活性 c.age = 1 # 輸出動態添加的年齡屬性 print(c.age)# 動態添加run方法,打印輸出貓的名稱和奔跑方式 def run(self):print('貓的名字是%s,奔跑方式是%s' % (self.name, self.way))# 實例化對象 p1 = Cat('大橘', '快速奔跑') # MethodType第一個參數是函數本身,第二個是調用run函數時,傳給run方法的第一個參數。 p1.run = MethodType(run, p1) # 調用方法 p1.run()

運算符重載

定義:讓自定義的類生成的對象(實例)能夠使用運算符進行操作

好處:使程序簡潔易讀并對自定義對象將運算符賦予新的規則

運算符重載列表

一個簡單的例子(B站):

class Person(object):def __init__(self, age):self.age = age# 運算符重載,self代表前一個對象,other代表后一個對象def __add__(self, other): return self.age + other.agedef __str__(self):return str(self.age) # 數據類型轉換#實例化對象 p1 = Person(1) p2 = Person(2) print(p1 + p2) # 等價于print( p1.__add__(p2))

培訓作業2: 使用__pow__和__lt__兩個運算符重載,對兩個成績進行冪運算和比較大小運算?

class Student(object): # 定義一個學生類def __init__(self, grade): # 定義構造方法self.grade = gradedef __pow__(self, other): # __pow__運算符重載,冪運算return self.grade ** other.gradedef __lt__(self, other): # __lt__運算符重載,判斷前一個對象值是否小于后者,若是返回true否則返回falsefirst = self.gradetwo = other.gradereturn first < twodef __str__(self):return str(self.grade) # 數據類型轉換p1 = Student(3) # 第一個實例對象 p2 = Student(2) # 第二個實例對象 print(p1 ** p2) # 等價于print( p1.__pow__(p2)) print(p1 < p2) # 等價于print( p1.__lt__(p2))

總結

以上是生活随笔為你收集整理的python寒假培训第二课的全部內容,希望文章能夠幫你解決所遇到的問題。

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