第四章 面向對象

第四章 面向對象

  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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448892.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448892.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448892.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

洛谷P2347 砝碼稱重 某一年noip提高組原題

可以轉化為01背包求方案數的問題&#xff0c;dp數組f[][]表示第幾個砝碼能稱出的重量,可壓縮至一維 轉移方程為f(i,j)f(i-1,j-w[i]) 當前我們可以稱出的重量必定是由之前的砝碼重量轉移過來的 #include<bits/stdc.h> using namespace std; const int N550; const int max…

解決:-bash: unzip: command not found (Linux 中 unZip/Zip 的安裝及使用)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Linux系統沒有自帶的壓縮解壓工具&#xff1b;需要我們自己安裝&#xff1b; 當用到zip或者unzip如果沒有安裝就會出現 unzip: Command…

云計算時代IT專業人員需具備的10項技能

摘要&#xff1a;IT專業人員需要不斷的學習&#xff0c;才能確保自己的工作能力跟上時代的步伐。云時代IT專業人員不僅需要具備一定的專業技能&#xff0c;比如快速運用自身知識快速在互聯網上構建應用程序&#xff0c;還必須具備商業、金融、業務需求分析等等。 【編者按】談…

java自定義注解學習筆記

注解學習筆記之自定義注解 Target&#xff08;{1,2,3,4,5,6,7}&#xff09; 1.ElementType.CONSTRUCTOR:用于描述構造器2.ElementType.FIELD:用于描述域3.ElementType.LOCAL_VARIABLE:用于描述局部變量4.ElementType.METHOD:用于描述方法5.ElementType.PACKAGE:用于描述包6.Ele…

[xsy3132]數表

題意&#xff1a;一個$n\times m$的數表&#xff0c;數值$\in[0,4)$&#xff0c;你可以任意次選擇一行或一列$1,\text{mod }4$&#xff0c;要最小化所有數的和 因為$n\leq10$&#xff0c;所以數表可以看成$m$個$n$位$4$進制數$a_{1\cdots m}$&#xff0c;以下使用不進位加法 定…

linux 下載、安裝 maven

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 創建maven的文件夾并下載maven的tar包到此文件夾中 //進入一個目錄 cd /usr/local//創建一個文件夾 mkdir maven//下載maven的tar包…

ELK4之進階學習

1.精確查找和模糊查找(term和match的區別) match經過分析(analyer)的, term是不經過分詞,直接去倒排索引中查找精確的值. 2.建議器的簡介(最左前綴或者自帶的做) (1)直接用現成的 (2)不只是糾錯,還有建議等等. (3)優點:用戶體驗,服務器減少請求(減少壓力,太耗電了,熱量太大) (4…

女人必知 教你認清6種隱性壞男人

周圍不乏有女朋友喜歡歷數往事、追憶曾擦肩而過的男人&#xff0c;有的說如果不是自己太苛求提早要見他家人引起反感&#xff0c;早就和心愛的人儷影雙雙甜蜜快樂了&#xff0c;還有的說暗戀的男生那一夜向他表露情感、她萬分感動、可男生最后提出上床她拒絕了、因而錯失了一段…

c# 編程學習(二)

2019獨角獸企業重金招聘Python工程師標準>>> 標識符是對程序中的各個元素進行標識的名稱。 ? 只能使用字母(大寫和小寫)、數字和下劃線 ? 標識符必須以字母或下劃線開頭 變量是容納值的存儲位置。可將變量想象成容納臨時信息的容器 命名變量的建議&#xff1a; …

linux 中的 nohup 命令(設置后臺進程): nohup: ignoring input and appending output to ‘nohup.out’

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、Linux 下使用 nohup Unix/Linux下一般比如想讓某個程序在后臺運行&#xff0c;很多都是使用 & 在程序結尾來讓程序自動運行。 …

PowerDesigner表結構和字段大小寫轉換

原文&#xff1a;https://www.cnblogs.com/zhzhang/p/3946609.html 【轉】PowerDesigner表結構和字段大小寫轉換 【轉自】http://blog.csdn.net/xysh1991/article/details/8016192 使用方法&#xff1a;進入PowerDesigner&#xff0c;打開一個PDM&#xff0c;在菜單欄找到&…

解決:Could not find or load main class org.apache.rocketmq.example.quickstart.Producer

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1.情景描述 &#xff1a;我只是想安裝運行 rocketmq&#xff0c;執行命令&#xff1a; sh bin/tools.sh org.apache.rocketmq.example.…

深入理解C++ 虛函數表

目錄 深入理解C 虛函數表虛函數表概述單繼承下的虛函數表派生類未覆蓋基類虛函數派生類覆蓋基類虛函數多繼承下的虛函數表無虛函數覆蓋派生類覆蓋基類虛函數鉆石型虛繼承總結幾個原則安全性問題深入理解C 虛函數表 ? C中的虛函數的作用主要是實現了多態的機制。關于多態&#…

react-native-baidu-map使用及注意問題

使用組件&#xff1a; react-native-baidu-map 獲取百度地圖API_KEY 地址&#xff1a;lbsyun.baidu.com&#xff0c;在控制臺成功創建應用后&#xff0c;就可以看到應用的api key了 安裝 yarn add react-native-baidu-map 復制代碼原生部分 Android配置 react-native link reac…

簡單掃清身體垃圾

“我們的身體在被‘設計’之初&#xff0c;就擁有了自主掃除體內垃圾的功能。只不過&#xff0c;這需要我們按照正確的方法去激發它 。”美國暢銷書作者喬斯卡曼和朱莉佩萊斯&#xff0c;在她們去年合著的《自我清潔》一書中強調了養成良好生活習慣可為身體排毒的重要性。 近日…

linux (阿里云 CentOS7) 中安裝配置 RocketMQ

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 JDK1.8的安裝&#xff1a; 1.檢查系統的JDK版本 根目錄下操作&#xff1a;cd java -version 2.檢測JDK安裝包 rpm -qa | grep ja…

Bootstrap簡介

1.使用準備 1.1 Bootstrap的下載 http://www.bootcss.com&#xff0c;下載用于生產環境的Bootstrap即可。 1.2 Bootstrap包含的內容 ● 全局CSS&#xff1a;基本的 HTML 元素均可以通過 class 設置樣式并得到增強效果&#xff1b;還有先進的柵格系統。 ● 組件&#xff1a;無數…

用TortoiseGit時的實用git命令

生成并獲取 sshkey&#xff1a; ssh-keygen -t rsa -C "xxxxxxxxxx.com" cat ~/.ssh/id_rsa.pub 克隆倉庫&#xff1a; git clone xxxxxx/xxx.git 重命名文件&#xff1a; mv file_name new_file_name git目錄區分大小寫&#xff1a; git config core.ignorecase fal…

有一種失敗叫瞎忙

很多時候&#xff0c;我們都在不知不覺的瞎忙&#xff0c;為了避免這樣的瞎忙&#xff0c;特為大家分享一個小的故事。 在一個山谷的禪房里有一位老禪師&#xff0c;他發現自己有一個徒弟非常勤奮&#xff0c;不管是去化緣&#xff0c;還是去廚房洗菜&#xff0c;這個徒弟從…

解決:org.apache.rocketmq.client.exception.MQClientException: No route info of this topic, TopicTest

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 原因1&#xff1a;啟動 broker 方式不對。 我完全是按照官方文檔操作的&#xff0c;在網上看到說這一步是錯誤的啟動 broker 方式&#…