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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第四章 面向对象

發布時間:2023/12/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第四章 面向对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第四章 面向對象

  1. 基本格式

    定義:當函數(業務功能)比較多,可以使用面向對象來進行歸類,如果有一個凡事使用的公共值,也可以放到對象中

#格式&關鍵字 class 類名:def __inti__(self,x)self.x = xdef 方法名(self,name):print(self.name) v1 = 類(666) v1.方法('Parallel')#存儲一些值,方便之后使用 clas Foo:def __intit__(self,n,a,g):self.name = nself.age = aself.gender = gdef show(self):temp = '我是%s,年齡%s,性別%s'%(self.name,self.age,self.gender,)print(temp) p = Person('Parallrl',18,'') #類()實例化對象,自動執行此類中的__init__方法 p.show()

  2. 三大特性

    2.1 封裝

      定義:將同一類的函數或重復使用的公共值封裝佛奧同一個類中,方便以后使用

    2.2 繼承

      定義:創建一個子類的對象,執行對象.方法時,優先在自己的類中找,如果沒有就在父類中找,多個類中如果有公共的方法,可以放在基類中

      注:繼承關系的查找順序,要注意self到底是哪個類創建的,就從此類開始找

#繼承 class Base: 父類(基類)def f1(self):pass class Foo(Base): 子類(派生類)def f2(self):pass obj = Foo()

  3. 類成員

    方法(綁定方法/普通方法):至少有一個self參數,先創建對象,由對象.方法()執行

    類方法:@classmethod,至少有一個參數cls,類.類方法()執行

    靜態方法:@staticmethod,參數無限制可以不傳參,可以不創建對象類.靜態方法名()執行

    類變量:寫在類的下一級,和方法同級,類/對象.類變量名稱調用

    屬性:@property,把方法編程屬性,出去了self不能有其他參數,用對象.屬性名調用,不需要加()

  4. 成員修飾符

    定義:公有&私有

#公有變量和私有變量 class Foo:def __init__(self,name):self.name = name #公共的self._name = name #私有的def func(self):print(self,name) obj = Foo('alex') print(obj.name) print(obj.__name) #外部訪問不到#訪問私有變量 class Foo:def __init__(self,name):self.__x = name obj = Foo('alex') print(obj._Foo__x) #強制訪問私有實例變量

  5. 特殊成員

#__init__:初始化方法,用于給對象賦值(默認執行)#__new__:構造空對象,比__inti__優先執行#__call__:可以用類()()直接執行call方法#__getitem__/__setitem__/__delitem__ class Foo:def __setitem__(self,key,value):print(key,value)def __getitem__(self,item):print(item)###xxxdef __delitem__(self,key):print(key)###ttt obj1 = Foo() obj1['k1'] = 123#內部會自動調用__setitem__方法 val = obj1['xxx'] #內部會自動調用__getitem__方法 print(val) del obj1['ttt']#內部會自動調用__delitem__方法#__str__:打印一個對象,當__str__返回什么,對象就打印什么 class Foo(object):def __str__(self):return 'sdsdsa' obj = Foo() print(obj) #打印的是對象,類型也是對象,但答應出來的是sdsdsa#__dict__:將要找的元素編程字典格式 class Foo(object):def __init__(self,name,age,email):self.name = nameswf.age = ageself.email = email obj = Foo('alex',19,'xxx@qq.com') val = obj.__dice__#去對象中找到所有變量轉換為字典 print(val) #{'name':'alex','age':19}#__enter__/__exit__:文件上下文管理 class Foo(object):def __enter__(self):self.x = open('a.txt',mode='a',encoding='utf-8')return self.xdef __exit__(self,exc_type,exc_val,exc_tb):self.x.close() with Foo() as ff:ff.write('alex')#對象互相加減乘除 class Foo(object):def __add__(self,other):pass obj1 = Foo() obj2 = Foo() val = obj1 +obj2###觸發add,前面觸發,前面為self,后面為other

  6. 嵌套

    定義:面向對象可以當參數嵌套到函數中,類(Foo)可以為key對象(obj)可以做key

class Dream(object):def __init__(self,title,addr):self.title = titleself.address = addrclass House(object):def __init__(self,name,dream_object):self.name = nameself.dream =dream_objects1 = Dream('北京','沙河') s2 = Dream('上海','浦東') s3 = Dream('深圳','南山')c1 = House('Parallel',s1) c1.name c1.dream.title c1.dream.address

  7. 反射

#根據字符串的形式去某個對象中操作他的成員 class Foo:def login(self):pass obj = Foo() func_name = input('請輸入方法名:') getattr(obj,func_name)() #找到方法并執行#根據字符串的形式去某個對象中判斷是否有該成員 class View(object):def login(self):return '登陸'def logout(self):return '登出'def index(self):return '首頁' obj = View() func_name = input('請輸入方法名:') if not hasattr(obj,func_name):print('輸入錯誤') getattr(obj,func_name)()#根據字符串的形式去某個對象中設置成員 class Foo:pass obj = Foo() setattr(obj,'k1','123') #obj.k1 = '123' #設置對象成員 print(obj.k1)#根據字符串的形式去某個對象中刪除成員 class Foo:k1 = 999 obj = Foo() delattr(obj,'k1')

  8. 內置函數

    issubclass:判斷某個類是否是某個類的子類  print(issubclass(子類,父類))  返回布爾值

    isinstance:判斷對象是否是某個類或該類基類的實例  print(isinstance(obj,Foo))  判斷obj是否是Foo或Foo基類的實例  返回布爾值

    super:根據self對象所屬類的繼承關系,按順序挨個找并執行,默認找到第一個就不找了  v = super().xx()

  9. 單例模式

    定義:無論實例化多少次,都是用第一次創建的那個對象

class Foo(Object):instance = Nonedef __new__(cls,*args,**kwargs):if not instance:cls.instance = object.supper().__new__(cls)return cls.instance obj1 = Foo() obj2 = Foo() #不管啟動多少個Foo內存地址都指向obj1

轉載于:https://www.cnblogs.com/parallel-Y/p/10921670.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

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

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