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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

面向对象编程(第四篇)

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

issubclass()與isinstance()

內置函數issubclass()用于判斷類對象與類對象之間的關系
內置函數isinstance()用于判斷實例對象與類對象之間的關系
內置函數issubclass()接受兩個實參,
第一個實參是類對象,
第二個實參是類對象或由類對象組成的元組。
當第二個實參是類對象時,如果第一個實參是二個實參的子類,那么返回True
當第二個實參是類對象組成的元組時,如果第一個實參是第二個實參中任意一個類對象的子類,返回True
class A(object):pass class B(object):pass class C(object):pass class D(A):pass print(issubclass(D,A)) print(issubclass(D,B)) print(issubclass(D,(B,A,C))) print(issubclass(D,(B,C))) print(issubclass(bool,int)) print(issubclass(bool,str)) print(issubclass(bool,(str,int,dict))) print(issubclass(bool,(str,list,dict))) >True False True False True False True False
內置函數isinstance()接受兩個實參,
第一個實參是實例對象,
第二個實參是類對象或由類對象組成的元組。
當第二個實參是類對象時,如果第一個實參是二個實參的實例對象,或者第一個實參是第二個實參的子類的實例對象,那么返回True
當第二個實參是類對象組成的元組時,如果第一個實參是第二個實參中任意一個類對象或其子類的實例對象,返回True
class A(object):pass class B(object):pass class C(object):pass class D(A):pass print(isinstance(D(),D)) print(isinstance(D(),A)) print(isinstance(D(),(D,B,C))) print(isinstance(D(),(B,A,C))) >True True True True

type()與dir()

內置函數type()用于獲得指定對象的類型
實例對象的類型是其對應的類對象
類對象的類型是type,也就是說,類對象時type的一個實例對象
class MyClass(object):pass mc = MyClass() print(type(mc)) > <class '__main__.MyClass'> print(type(18)) print(type('abc')) print(type(MyClass)) print(type(int)) > <class 'int'> <class 'str'> <class 'type'> <class 'type'>
自定義函數對象的類型是function。
內置函數對象的類型是builtin_function_or_method
def do_sth():pass print(type(do_sth)) > <class 'function'> print(type(dir)) > <class 'builtin_function_or_method'>
可以使用運算符==判斷某個對象的類型是否是指定的類型
對于基本數據類型,可以直列使用其對應的類名;如果不是基本數據類型,需要使用標準庫中的模塊types中定義的變量
import types print(type(do_sth) == types.FunctionType) print(type(print) == types.BuiltinFunctionType) > True True

dir()

對于指定的類對象或實例對象,可以調用內置函數dir()獲得其所有可以訪問的屬性和方法(包括從父類中繼承的屬性和方法)的列表
類對象與實例對象的結果是有區別的,類對象的結果中不包括實例屬性
class MyClass(object):ca = "ca"def __init__(self):self.ia = "ia"def im(self):pass@classmethoddef cm(cls):pass@staticmethoddef sm():pass print(dir(MyClass)) > ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'ca', 'cm', 'im', 'sm'] print(dir(MyClass())) > ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'ca', 'cm', 'ia', 'im', 'sm']

hasattr(),getattr(),setattr(),delattr()

1.hasattr(object,name)用于判斷指定的對象object是否有參數name指定的屬性或方法。
2.getattr(object,name[,default])用于獲取指定的對象object中名為name的屬性或方法
如果不指定參數default,那么當object中不存在名為name的屬性和方法時,拋出AttributeError.
如果指定了參數default,那么當object中不存在名為name的屬性和方法時,返回default.
getattr(object,name)等價于:object.name
3.setattr(object,name,value)用于在指定的對象object中添加或修改名為參數name的屬性或方法,添加或修改后的值為value
setattr(object,name,value)等價于:object.name = value
4.delattr(object,name)用于刪除指定的對象object中名為參數name的屬性或方法。
delattr(object,name)等價于:del object.name
class MyClass(object):def __init__(self):self.x = 1def do_sth(self):print("do_sth被調用") mc = MyClass() print(hasattr(mc,'x')) print(hasattr(mc,'do_sth')) print(hasattr(mc,'y')) > True True False print(getattr(mc,'x')) >1 print(getattr(mc,'y')) >--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-5-d4450b7ca500> in <module>() ----> 1 print(getattr(mc,'y'))AttributeError: 'MyClass' object has no attribute 'y' print(getattr(mc,'y',2)) >2 setattr(mc,'z',3)# 等價于mc.z = 3 print(getattr(mc,'z')) >3 delattr(mc,'z') print(hasattr(mc,'z')) >False

算術運算符重載

標準算術運算符在默認情況下不能用于自定義類對象的實例對象
class MyClass(object):pass class MyClass2(object):pass print(MyClass() + MyClass2()) >--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-12-fc67b776bd15> in <module>()3 class MyClass2(object):4 pass ----> 5 print(MyClass() + MyClass2())TypeError: unsupported operand type(s) for +: 'MyClass' and 'MyClass2'
如果想讓標準算術運算符可以用于自定義類對象的實例對象
必須在自定義類對象中實現標準算術運算符對于的以下特殊方法:
1.+對應的特殊方法是__add__()和__radd__()
2.-對應的特殊方法是__sub__()和__rsub__()
3.*對應的特殊方法是__mul__()和__rmul__()
4./對應的特殊方法是__truediv__()和__rtruediv__()
5.//對應的特殊方法是__floordiv__()和__rfloordiv__()
class MyClass1(object):def __add__(self,other):return "這是__add__+的結果" class MyClass2(object):def __radd__(self,other):return "這是__radd__+的結果" obj1 = MyClass1() obj2 = MyClass2() print(obj1+obj2) > 這是__add__+的結果 class MyClass1(object):pass class MyClass2(object):def __radd__(self,other):return "這是__radd__+的結果" obj1 = MyClass1() obj2 = MyClass2() print(obj1+obj2) > 這是__radd__+的結果 class MyClass1(object):pass class MyClass2(object):pass obj1 = MyClass1() obj2 = MyClass2() print(obj1+obj2) >--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-13-79cbfd976803> in <module>()5 obj1 = MyClass1()6 obj2 = MyClass2() ----> 7 print(obj1+obj2)TypeError: unsupported operand type(s) for +: 'MyClass1' and 'MyClass2' class MyClass1(object):def __add__(self,other):print("特殊方法__add__被調用")return NotImplemented class MyClass2(object):def __radd__(self,other):return "這是__radd__+的結果" obj1 = MyClass1() obj2 = MyClass2() print(obj1+obj2) >特殊方法__add__被調用 這是__radd__+的結果 class MyClass1(object):def __add__(self,other):print("特殊方法__add__被調用")return NotImplemented class MyClass2(object):def __radd__(self,other):print("特殊方法__radd__被調用")return NotImplemented obj1 = MyClass1() obj2 = MyClass2() print(obj1+obj2) >特殊方法__add__被調用 特殊方法__radd__被調用 --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-15-a92b8ee08b44> in <module>()9 obj1 = MyClass1()10 obj2 = MyClass2() ---> 11 print(obj1+obj2)TypeError: unsupported operand type(s) for +: 'MyClass1' and 'MyClass2'

總結

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

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

主站蜘蛛池模板: 精品久久久久国产 | 欧美人与禽zozzo性之恋的特点 | 丰满雪白极品少妇流白浆 | 国产码视频 | 精品无码一区二区三区电影桃花 | 一级特黄aa | аⅴ天堂中文在线网 | 五月天丁香在线 | 国产免费一区二区三区 | 每日在线观看av | 天堂网8 | 奇米影视狠狠 | 在线视频观看你懂得 | 亚洲永久精品一区 | 在线免费观看高清视频 | 香蕉视频黄污 | 修女也疯狂3免费观看完整版 | 一区二区三区四区在线 | 蜜臀aⅴ国产精品久久久国产老师 | 中文字幕一本 | av黄在线观看 | 日韩在线免费视频观看 | 色羞羞| 丰满人妻一区二区三区46 | 手机看片日韩福利 | a级片在线播放 | 99视频网站 | 日本精品视频一区 | 亚洲视频123 | 久久久久亚洲av无码专区喷水 | 少妇荡乳情欲办公室456视频 | 18禁裸男晨勃露j毛免费观看 | 大奶骚| 国产农村妇女精品久久久 | 日韩免费久久 | 欧美性插视频 | 精品无码一区二区三区电影桃花 | 人人澡人人澡人人澡 | av私库在线观看 | 国产精品亚州 | 最新中文字幕av | 秋霞网一区二区 | 日本在线免费视频 | 欧美成年人在线观看 | av中文字幕av | 国产宾馆实践打屁股91 | 亚洲乱仑 | 欧美一二级 | 香蕉福利| 青青草视频免费播放 | 爱逼综合 | 日韩免费中文字幕 | 亚洲AV无码一区二区三区性 | 青草视频在线观看免费 | 欧美性免费 | 亚洲精品乱码久久久久久蜜桃图片 | 青青青av| 日韩国产在线播放 | 日韩精品偷拍 | 欧美精品动漫 | 久久免费视屏 | 国产在成人精品线拍偷自揄拍 | 五月婷婷在线观看视频 | 日本中文字幕在线观看 | 精品视频久久 | 午夜精品免费视频 | 夜夜天天| 91视频免费观看 | 天堂俺去俺来也www久久婷婷 | 人妻丰满熟妇无码区免费 | 天堂无乱码 | 天天爽夜夜爽人人爽 | 日本美女性生活视频 | 中文字幕在线观看线人 | 狠狠一区二区 | 亚洲夜色 | 国产一区二区91 | 国偷自产av一区二区三区 | 欧美亚色 | 一区二区不卡免费视频 | 久久人| 一本毛片 | 青青草视频偷拍 | www网站在线免费观看 | 男人深夜影院 | 中文字幕av日韩 | 国产女主播喷水视频在线观看 | 中文字幕人妻丝袜二区 | 欧美黄网站| 欧美日韩人妻精品一区二区三区 | 99综合网| 欧美成人片在线观看 | 三级黄色图片 | 后入内射欧美99二区视频 | 亚洲天天干 | 亚洲一在线 | 射影院 | 日韩欧美精品中文字幕 | 精品1卡二卡三卡四卡老狼 日韩三级网 |