python記錄_day16 類的成員

来源:https://www.cnblogs.com/zhang-yl/archive/2018/11/07/9925464.html
-Advertisement-
Play Games

一、變數 1、實例變數(又叫欄位、屬性) 創建對象時給對象賦值 形式: self.xxx = xxx 訪問: 對象名.xxx 只能由對象訪問 1 class Person: 2 def __init__(self,age,name): 3 self.name = name #實例變數 4 self. ...


一、變數

1、實例變數(又叫欄位、屬性)

創建對象時給對象賦值

形式:

self.xxx = xxx

訪問:

 對象名.xxx     只能由對象訪問  

1 class Person:
2     def __init__(self,age,name):
3         self.name = name   #實例變數
4         self.age = age      #實例變數
5 p1 = Person(18,"iboy")
6 print(p1.name)     #通過對象名訪問實例變數
7 
8 p1.hobby = "打游戲"    #這是在當前類中添加一個實例變數
9 print(p1.hobby)
View Code

 

2、類變數

直接寫在類中的變數,給類賦值

形式:

變數名 = 值

訪問:

類名/對象名.xxx   類名和對象名都能訪問,但是只能通過類名來修改變數值。通過對象名修改,相當於在當前對象中增加了一個實例變數

一般把對象中的共性抽出來作為類變數

 1 class Person:
 2     country = "中國"   #類變數
 3     def __init__(self,age,name):
 4         self.name = name   #實例變數
 5         self.age = age      #實例變數
 6 
 7 p1 = Person("18","iboy")   #對象p1
 8 print(p1.country)   #中國
 9 p2 = Person("17","jacklove")   #對象p2
10 print(p2.country)    #中國
11 print("--------")
12 Person.country = "中華"  #通過類名 修改了類變數country
13 print(p1.country)    #中華
14 print(p2.country)    #中華
15 print("--------")
16 p1.country = "大清"   #通過對象名 是在p1中創建了實例變數country, 並沒有修改類變數country
17 print(p1.country)    #大清
18 print(p2.country)    #中華
View Code

 

二、方法

1、實例方法

直接寫在類中的方法,只能由對象調用

形式:

def  方法名(self,參數):

  pass

訪問:

對象名.方法名(參數)

 1 class Car:
 2     def run(self):
 3         print("車會跑")
 4     def cul(self,a,b):
 5         print(a+b)
 6     def jump(self):
 7         print("you jump,i push")
 8 #Car.run()   #TypeError: run() missing 1 required positional argument: 'self'
 9 c = Car()   #創建對象c
10 c.run()
11 c.cul(521,1314)
12 c.jump()
13 
14 結果:
15 車會跑
16 1835
17 you jump,i push

 

2、類方法

在聲明時加上@classmethod裝飾的方法

形式:

@classmethod

def 方法名(cls):

  pass

訪問:

類名/對象名.方法名()

class Person:
    def chi(self):     #實例方法
        print("人要吃飯")
    @classmethod
    def he(cls):      # 這是類方法,可以通過類和對象名訪問
        print(cls)
        print("人要喝水")

Person.he()
p = Person()
p.he()   

結果:
<class '__main__.Person'>
人要喝水
<class '__main__.Person'>
人要喝水

 

3、靜態方法

聲明時加@staticmethod 裝飾的方法,相當於在類中定義的一個普通函數

形式:

@staticmethod

def  方法名():

  pass

訪問:

類名/對象名.方法名()

class Person:

    def chi(self): # 實例方法
        print("人在吃")

    # 類方法
    @classmethod # 類方法
    def he(cls): # cls 類
        print(cls)
        print("我是喝")

    @staticmethod
    def sleep():  # 在類中定義的一個普通函數,不帶參
        print("和你睡不等於睡你 -- 薑文")

    @staticmethod
    def fly(height):  # 在類中定義的一個普通函數,帶參
        print("上天%s" % height)
Person.sleep()
Person.fly(500)
p = Person
p.sleep()
p.fly(500)

結果:
和你睡不等於睡你 -- 薑文
上天500
和你睡不等於睡你 -- 薑文
上天500
靜態方法

 

三、屬性方法

通過@property 把一個方法變成一個實例變數來使用,我自稱為屬性方法,就是本來是一個方法,但是有屬性的效果。

形式:

@property

def 方法名(self):

  return  值

訪問:

對象名.方法名

class Person:
    def __init__(self,name,birthday,qq):
        self.name = name
        self.birthday = birthday
        self.qq = qq

    @property
    def age(self):
        return 2018-self.birthday
p1 = Person("王三",1995,"19252862163")
#print(p1.age())  # TypeError: 'int' object is not callable    age是不可調用的
print(p1.age)    #  23  可以像屬性一樣用
print(Person.age)   # 通過類名訪問訪問不到 <property object at 0x0000000001E18EF8> 

!!!註意

函數只能有一個self 參數

函數必須有返回值

不能給該屬性賦值    像p1.age = 10 是不行的

 

四、私有

在變數名或方法名前面加__作為首碼就表示這是私有的

私有的東西只能類自己內部訪問

 1 class Person:
 2     def __init__(self, name): # 構造, 創建對象的時候自動調用
 3         self.__name = name # 私有的
 4 
 5     def __chi(self): # 私有的
 6         print("我要吃. 瘋狂的吃")
 7 
 8     def he(self):
 9         self.__chi() # 內部調用
10         print("我是喝", self.__name)
11 
12 # Person.__chi   #類訪問私有方法  報錯 AttributeError: type object 'Person' has no attribute '__chi'
13 p = Person("哈哈哈")
14 # p.__chi()    #對象訪問私有方法   報錯 AttributeError: 'Person' object has no attribute '__chi'
15 #print(p.__name)   #對象訪問私有實例變數   報錯 AttributeError: 'Person' object has no attribute '__name'
16 p.he()       #內部訪問 可以
17 
18 結果:
19 我要吃. 瘋狂的吃
20 我是喝 哈哈哈

需要註意的是, 對於私有的內容,子類是無法繼承的。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • about 演算法 項目介紹 工作之餘,代碼敲多了,停下來思考思考,會有異常不到的收穫。。。只為更好的自己 如何用棧實現隊列? 提示下:用一個棧肯定是沒辦法實現隊列,但如果我們有兩個棧呢? 分析:棧和隊列的特性 棧是先進後出,FILO 出入元素都是在同一端(棧頂) 入棧 1540432924606.p ...
  • 一、 性能往往是特定情景下的評價,泛泛地說性能“好”或者“快”,往是具有誤導性的。通過引入基準測試,我們可以定義性能對比的明確條件、具體的指標,進而保證得到定量的、可重覆的對比數據,這是工程中的實際需要。 不同的基準測試其具體內容和範圍也存在很大的不同。如果是專業的性能工程師,更加熟悉的可能是類似S ...
  • 公司推進Jenkins自動化部署,因為web站點都是集群部署,部署需要測試指定伺服器web服務是否成功啟動,頁面是否正常訪問,經過不斷baidu發現,python的request模塊可以很好的解決這一問題。本文記錄瞭解決這一問題的過程。 安裝包管理工具pip 安裝requests模塊 請求http資 ...
  • 之前介紹的各類變數都是單獨聲明的,倘若要求定義相同類型的一組變數,則需定義許多同類型的變數,顯然耗時耗力且不宜維護。為此,編程語言引入了數組的概念,每個數組都由一組相同類型的數據構成,對外有統一的數組名稱,對內通過序號區分每個數據元素。數組類型由基本的變數類型擴展而來,在基本類型後面加上一對方括弧, ...
  • HTTP連接管理: 1.誤解的Connection首部 當http報文經過中間客戶端到服務端中間的各種代理設備時,對標簽中列出的頭信息進行刪除,close是事務結束後關掉此條連接 2.消除串列化的時延 並行連接:多條TCP連接發起併發的HTTP請求 持久連接:重用TCP連接,消除連接和關閉時延 管道... ...
  • ''' 輸入2,5,列印: 1 2 3 4 5 6 7 8 9 10 ''' #行數 m = int(input('請輸入一個整數')) n = int(input('請在輸入一個整數')) for i in range(m): for j in range(n): num = i * n + j ... ...
  • TCP三次握手階段 三次握手總述 第一階段: 概念:半連接池 三次握手正常狀態 三次握手異常狀態syn_rcvd TCP四次揮手階段 四層揮手總述 UDP與TCP的區別 示例:如下圖訪問如下網址就會出現下麵的信息https://www.cnblogs.com/huwentao/p/9845379.h ...
  • 1.原因現在還不知,試了幾個地方可以和不可以 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...