python class成員詳解


一、類的成員--變量

  在類中變量成員分為兩類:實例變量(字段)和類變量(靜態變量)

  (1)實例變量:每一個實例都應該擁有自己的變量,實例變量是給對象用的。

  (2)類變量:類變量是屬於類的,只有通過類名調用才能更改類變量的值。

class Person:
    coutry="中國" #在此處申明類變量
    def __init__(self,name ,age): #構造方法,在此處聲明實例化變量
        self.name=name  #實例變量
        self.age=age

# Person.coutry="大慶" #通過類 修改類變量

mt=Person("馬化騰",18)
mt.company="騰訊" #添加實例變量
mt.coutry="大慶" #即使類變量中存在country,對象不能直接對類變量修改,只會在自己對象中添加實例化變量
print(mt.age) #18
print(mt.company)#騰旭
print(mt.coutry)    #對象.變量 :尋找的方法,首先現在對象的屬性中尋找,如果找到直接,停止尋找,並返回,否則繼續向類變量尋找
al=Person("曹操",135)
print(al.age) #135
print(al.coutry)#中國
# 類變量的修改只能通過類修改 

  

 

二、類的成員---方法

  1、成員方法(實例方法)

lass Cat:
    def chi(self):
        print("貓喜歡吃魚")
c=Cat()
c.chi()#貓喜歡吃魚

  2、靜態方法:類里面定義一個普通的函數(與外部函數一樣)

    格式:@staticmethod +函數定義的方法

ss Static( ):
    @staticmethod
    def chi():#靜態方法,不需要傳遞self參數,與普通函數一樣
        print("我是一個靜態的吃吃")
s=Static()
s.chi() #我是一個靜態的吃吃

  3、類方法:不管是對象還是類訪問該方法,接受到的值都是類

    格式:@classmethod +函數定義的方法(cls)

class Class():
    @classmethod
    def say(cls):#第一個位置自動產生一個cls,接受一個類
        print(cls)
        print("我是類方法,我接受的值是類")
c=Class()
c.say() #<class '__main__.Class'> 我是類方法,我接受的值是類
Class.say() #<class '__main__.Class'> 我是類方法,我接受的值是類

    ⾯試題: 類⽅法/靜態⽅法和實例⽅法有什么區別?

類方法:一般只由類調用,不推薦用實例調用,有默認傳遞的參數cls,默認傳遞的參數是類;
實例方法:實例方法由實例對象調用,有默認傳遞的參數self,默認參數是對象本身;
靜態方法:可以由類和實例對象調用,沒有默認參數

 

 

三、類的成員--屬性

  屬性一般在__init__(self)中創建,但是有時候我們的屬性需要計算,這個時候屬性就不能直接在___init__中聲明,此實需要利用函數的屬性化。

  函數屬性化:把公式轉換為屬性

  格式:@property +函數定義的方法

etime #插入時間模塊
class Person:
    def __init__(self,name,birthday,email):
        self.name=name
        self.birthday=birthday
        self.email=email
#   要求需要定義一個age屬性
    @property #把方法轉換為屬性,對象屬性的書寫,self.age
    def age(self): #方法中只有一個參數self
        now_time = int(datetime.datetime.now().strftime("%Y"))#獲取當前的年的數值:2018
        return now_time-int(self.birthday.strip().split("-")[0]) #2018-1014

c=Person("小雞","2014-10-15","123a46@qq.com")
print(c.age) #c.age 得到年齡屬性  結果:4

   總結;

    1、方法參數只有一個self;

    2、方法中需要書寫@property;

    3、調用的時候,不需要帶括號,直接當成對象的屬性變量來用就可以;

    4、這種套路只能取值,不能設置值。

 

 

四、私有

  私有方法的表示方法:__方法 、__變量、__類

  在python中使用__作為方法或者變量的前綴,那么這個方法或者變量就i是一個私有的。

  1、私有變量

 Person:
def __init__(self,name,laopo,):
self.name=name
self.__laopo=laopo#私有變量,老婆是自己的別人不能用
def look(self):
print(self.__laopo)
r=Person("周傑倫","昆侖")
r.look() #通過內部函數訪問 昆侖
print(r.__laopo)#type object 'Person' has no attribute '__laopo'

  2、私有方法

class Yue:
    def __yue(self):
        print("我要出去約約約")
    def chi(self):
        print("吃什么")
    def __play(self):
        print("玩什么")
r=Yue()
r.chi()
r.__yue() #'Yue' object has no attribute '__yue' 報錯
r.__play  #'Yue' object has no attribute '__play' 報錯

  3、私有類和私有靜態方法不再贅述了,與私有的其他的方法一樣

  總結:

    1、私有方法不能被外部訪問,只能通過內部訪問;

    2、無法被繼承。

 

 

    

 

  

    

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM