learn_Day14 内置函数补充、反射、初识面向对象
生活随笔
收集整理的這篇文章主要介紹了
learn_Day14 内置函数补充、反射、初识面向对象
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
內置函數
- __import__()用于導入模塊
- getattr 用于尋找模塊的指定對象
- a = __import__(‘b’)? # b為模塊名,b是字符串 ==>> 導入模塊b并重新命名為a
- c = getattr(a,’d’)? # d為模塊中指定對象 ==>> 找到模塊中命名為d的對象
- d() ==>> 執行d
?
?反射
定義:根據字符串去某個對象中去操作其成員
- 通過字符串形式導入模塊
- 通過字符串形式去模塊中尋找并執行
例1:導入lib/account中的a并執行
# /usr/local/bin/python # -*- coding: utf-8 -*- # Author: Ren Hangdef login():return "login"def logout():return "logout"def nb():return "niu" lib/accoutn/a例2:模擬web框架
# 模擬web框架 from lib.account import a url = input("shuru:") inp = url.split('/')[-1] if hasattr(a, inp):target_func = getattr(a, inp)r = target_func()print(r) else:print("404")?
初識面向對象
- # 面向對象:不是所有的情況都適用
- # c#、java只能用面向對象進行編程,Python即可以用函數編程也可以用面向對象編程
- # 函數編程比較繁瑣,面向對象比較方便
- # 面向對象編程過程 # 創建類(用于封裝函數) class xxx:def f1(self):print("f1")def f2(self):print("f2")def f3(self):print("f3")def f4(self):print("f4")# 根據類創建對象,使用對象去執行類中的方法 a = xxx() b = a.f1()
封裝的應用場景:
1.當同一類型的方法具有相同的參數時直接封裝到對象即可 2.以類當做模板,創建多個對象,對象可以封裝不同的數據 # 方法1 class ooo:def o1(self):print(self.b1)def o2(self):print(self.b1)obj1 = ooo() # 創建對象 obj1.b1 = "abc" # 在對象中封裝數據 obj1.o1() # 執行類的方法,在執行過程中可以根據self去obj1中去提取封裝里面的數據 obj2 = ooo() obj2.b1 = "xxx" obj2.o2() # 方法1 # 方法2:__init__構造方法 # 通過對象直接調用 class Foo:def __init__(self, name, age):self.name = nameself.age = ageobj1 = Foo("ooo", 18) print(obj1.name, obj1.age) obj2 = Foo("xxx", 19) print(obj2.name, obj2.age)# 通過self間接調用 class Foo:def __init__(self, name, age):self.n = nameself.a = agedef fo(self):print(self.n)print(self.a)obj1 = Foo("ooo", 18) obj1.fo() obj2 = Foo("xxx", 19) obj2.fo() 方法2?
繼承:
1.派生類可以繼承基類的所有東西,如果基類與派生類同時存在這個東西,優先派生類 2.在Python中一個派生類可以繼承多個基類,其他語言中只能繼承一個基類 3.派生類在繼承多個基類時,按照指定循序尋找,如圖所示: 注:藍色箭頭為繼承循序,紅色箭頭為繼承關系 # 繼承 class Animals: # 基類def chi(self):print("吃")def he(self):print("喝")class Dog(Animals): # 派生類def __init__(self, name):self.na = namedef jiao(self):print(self.na + "wang")a = Dog("wangwnag") # 創建派生類對象 a.chi() # 執行基類方法 a.he() a.jiao() # 繼承?? ? ? ??
多態:多種形態。Python本身支持多態
class Foo:def f1(self):print("Foo")class Bar:def f1(self):print("Bar")def func(arg):arg.f1()func(Foo()) func(Bar())擴展(其他語言):
-重載:函數名相同,參數個數不同 -重寫:在派生類中重新實現基類中的方法 -接口:Java、c#等其他語言(首字母為I),在Python中默認不存在,用于約束,不能實現任何功能,如果派生類繼承接口則派生類必須實現接口內的每一個功能練習 # /usr/local/bin/python # -*- coding: utf-8 -*- # Author: Ren Hang""" 會員信息 會員A: 會員號:HY0001,積分:3 會員B: 會員號:HY0002,積分:5 會員C: 會員號:HY0003,積分:10購買一次商品 + 1 分,退一次商品 - 1 分 """class Member:"""Name:姓名, MemberNo:會員號, Integral:積分"""def __init__(self, Name, MemberNo, Integral):self.name = Nameself.no = MemberNoself.integral = Integraldef buy(self):"""注釋:購買商品"""self.integral = self.integral + 1def retreat(self):"""注釋:退貨"""self.integral = self.integral - 1def detail(self):"""注釋:會員的詳細信息"""temp = "姓名:%s ; 會員號:%s ; 積分:%s" % (self.name, self.no, self.integral)print(temp)# 員工信息 HYA = Member('Aa', "HY0001", 3) # 創建蒼井井角色 HYB = Member('B', "HY0002", 5) # 創建東尼木木角色 HYC = Member('C', "HY0003", 10) # 創建波多多角色 # 輸出原始信息 print("原始信息".center(30, "-")) HYA.detail() HYB.detail() HYC.detail() # 開始記錄 print("第一次記錄".center(30, "-")) HYA.buy() # 會員A買了一次 HYB.retreat() # 會員B退了一次 HYC.buy() # 會員C買了一次# 輸出當前所有人的詳細情況 HYA.detail() HYB.detail() HYC.detail()print("第二次記錄".center(30, "-")) HYA.buy() # 會員A買了一次 HYB.buy() # 會員B買了一次 HYC.retreat() # 會員C退了一次# 輸出當前所有會員的詳細信息 HYA.detail() HYB.detail() HYC.detail()
轉載于:https://www.cnblogs.com/grissom/p/6659277.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的learn_Day14 内置函数补充、反射、初识面向对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最大公约数之和——极限版II
- 下一篇: 201521123078 《Java程序