1. 程式人生 > 實用技巧 >class 類的小總結

class 類的小總結

一、類的變數

001、類的基本方法和變數

01、類裡面有:
    類方法(例項方法):分為"靜態方法""類方法",還有"成員方法"
    類變數(也叫靜態變數):每一個被建立的物件都有這個類變數,可以通過"obj.類變數名" 來訪問
    例項變數(也叫欄位):每個物件在建立的時候,都需要__init__(self) 初始化,然後擁有這個類的例項變數
02、修改類的類變數需要用類來改變:
    Person.aper="修改類變數"   那麼,物件訪問這個類變數時(obj.aper),將會顯示修改後的 "修改類變數"
03、修改例項變數可以用物件來改變,但是隻針對"當前這個物件"  有用,比如:p1.name="
小明",則p1.name="", p2.name="原來的例項變數名" p2 還是顯示原來建立物件時的名字

看下面的程式碼:

class Person:
    count=0
    aper="你好" # 這個是類變數
    def __init__(self,name,age): # 例項方法或則類方法
        self.name=name  # 例項變數,建立的物件都有這幾個變數
        self.age=age
        Person.count+=1

    def dig(self): # 例項方法或成員方法
        aper="dog的你好
" print("實力方法dig") print(Person.count) p1=Person("ming",12) p1.aper="你不好" # 通過物件訪問 類變數和 例項變數 print(p1.name) print(p1.aper) Person.aper="你好的啊" p2=Person("ok",24) print(p2.aper) print(Person.count) 結果顯示: ''' 0 ming 你不好 你好的啊 2 '''

002、類裡面的方法的說明

01、類裡面有:
    類方法(例項方法):分為"靜態方法""類方法",還有"成員方法
" 類變數(也叫靜態變數):每一個被建立的物件都有這個類變數,可以通過"obj.類變數名" 來訪問 例項變數(也叫欄位):每個物件在建立的時候,都需要__init__(self) 初始化,然後擁有這個類的例項變數

A、成員方法:其實就是物件能直接方法 (obj.method()) 訪問

class Person:
    count=0
    aper="你好" # 這個是類變數
    def __init__(self,name,age): # 例項方法或則類方法
        self.name=name  # 例項變數,建立的物件都有這幾個變數
        self.age=age
        Person.count+=1

    def dig(self): # 例項方法或成員方法
        aper="dog的你好"
        print("實力方法dig")
# 訪問成員方法,也就是例項方法 dig()
p1=Person("ming",45)
p1.dig()  # 列印:  實力方法dig

B、靜態方法(staticmethod),其實就是不用給他傳遞引數self,不需要使用成員變數,但是需要在這個方法上加上 @staticmethod 就是靜態方法了,

關於訪問靜態方法,特別提醒

一般是使用   "類名.靜態方法()"  訪問,例如下面的
Person.func()  # 列印:  靜態方法

p1.func() # 物件也可以訪問. 但最好不要這麼⼲. 以便於區分靜態⽅法和例項⽅法
class Person:
    count=0
    aper="你好" # 這個是類變數
    def __init__(self,name,age): # 例項方法或則類方法
        self.name=name  # 例項變數,建立的物件都有這幾個變數
        self.age=age
        Person.count+=1

    def dig(self): # 例項方法或成員方法
        aper="dog的你好"
        print("實力方法dig")
    
    @staticmethod  # 靜態方法,不需要傳值
    def func():
        print("靜態方法")
        
# 訪問靜態方法:
Person.func()  #   # 列印:  靜態方法

C、 類方法,在被呼叫的時候,也不需要傳遞值,但是會給其預設為一個引數 cls ,在傳遞的時候,自動將類傳遞給這個cls,同時需要在這個方法上加上 @classmethod 來說明這是一個 類方法

class Person:
    count=0
    aper="你好" # 這個是類變數
    def __init__(self,name,age): # 例項方法或則類方法
        self.name=name  # 例項變數,建立的物件都有這幾個變數,物件可以直接訪問
        self.age=age
        Person.count+=1

    def dig(self): # 例項方法或則類方法
        aper="dog的你好"
        print("實力方法dig")

    @staticmethod  # 靜態方法
    def func():
        print("靜態方法")

    @classmethod
    def func02(cls,a,b):
        print("類方法的類為:",cls)
        return a+b


p1=Person("ming",45)
# 通過物件訪問 類方法,不建議使用物件反問類方法和靜態方法,這樣利於區分 實力方法和類方法,靜態方法
print(p1.func02(1,2))  # 類方法的類為: <class '__main__.Person'>   3

# 通過類訪問 類方法
print(Person.func02(2,3))  # 類方法的類為: <class '__main__.Person'>    5

003、私有變數,物件不能直接訪問

class Person:
    count=0
    aper="你好" # 這個是類變數
    def __init__(self,name,age,addr): # 例項方法或則類方法
        self.name=name  # 例項變數,建立的物件都有這幾個變數
        self.age=age
        Person.count+=1
        self.__addr=addr

    def dig(self): # 例項方法或則類方法
        aper="dog的你好"
        print("實力方法dig")

    @staticmethod  # 靜態方法
    def func():
        print("靜態方法")

    @classmethod
    def func02(cls,a,b):
        print("類方法的類為:",cls)
        return a+b


p1=Person("小白",14,"大街一號")
# 物件訪問例項變數 # 可以直接訪問
print(p1.name)    # 小白
print(p1.age)     # 14
# 物件訪問私有變數  # 會報錯,不能訪問
# print(p1.__addr)   # AttributeError: 'Person' object has no attribute 'addr'
# 類訪問私有變數  # 也不能訪問
print(Person("小黑",45,"大街34號").__addr)  # AttributeError: 'Person' object has no attribute '__addr'

A、通過公共方法來訪問私有變數

class Person:
    count=0
    aper="你好" # 這個是類變數
    def __init__(self,name,age,addr): # 例項方法或則類方法
        self.name=name  # 例項變數,建立的物件都有這幾個變數
        self.age=age
        Person.count+=1
        self.__addr=addr

    # 定義公共方法來訪問私有變數
    def  gongg(self):
        print("公共方法訪問私有變數")
        return self.__addr
    
    
    def dig(self): # 例項方法或則類方法
        aper="dog的你好"
        print("實力方法dig")

    @staticmethod  # 靜態方法
    def func():
        print("靜態方法")

    @classmethod
    def func02(cls,a,b):
        print("類方法的類為:",cls)
        return a+b
# 物件通過公共方法訪問私有變數
p1=Person("小白",14,"大街一號")
print(p1.gongg())  # 列印: 公共方法訪問私有變數     大街一號

# 類通過公共方法訪問私有變數
print(Person("小黑",45,"大街34號").gongg())  # 列印:  公共方法訪問私有變數   大街34號

004、私有方法 也就是單下劃線的方法 def __func02(self): 這種。私有方法只能類中自己呼叫(方法之間互相呼叫)

class Person:
    count=0
    aper="你好" # 這個是類變數
    def __init__(self,name,age,addr): # 例項方法或則類方法
        self.name=name  # 例項變數,建立的物件都有這幾個變數
        self.age=age
        Person.count+=1
        self.__addr=addr

    # 定義公共方法來訪問私有變數
    def  gongg(self):
        print("公共方法訪問私有變數")
        return self.__addr

    def dig(self): # 例項方法或則類方法
        aper="dog的你好"
        print("實力方法dig")

    @staticmethod  # 靜態方法
    def func():
        print("靜態方法")

    @classmethod
    def func02(cls,a,b):
        print("類方法的類為:",cls)
        return a+b

    # 定義私有方法
    def __func02(self):
        print("這個是私有方法")
p1=Person("小白",14,"大街一號")

# 物件訪問私有方法,無法訪問
print(p1.__func03)  # 報錯:AttributeError: 'Person' object has no attribute '__func03'

# 類訪問私有方法,無法訪問
print(Person.__func03)  # AttributeError: type object 'Person' has no attribute '__func03'

B、同理需要訪問的話,可以定義公共的成員方法來訪問這個私有方法

class Person:
    count=0
    aper="你好" # 這個是類變數
    def __init__(self,name,age,addr): # 例項方法或則類方法
        self.name=name  # 例項變數,建立的物件都有這幾個變數
        self.age=age
        Person.count+=1
        self.__addr=addr

    # 定義公共方法來訪問私有變數
    def  gongg(self):
        print("公共方法訪問私有變數")
        return self.__addr

    def dig(self): # 例項方法或則類方法
        aper="dog的你好"
        print("實力方法dig")

    @staticmethod  # 靜態方法
    def func():
        print("靜態方法")

    @classmethod
    def func02(cls,a,b):
        print("類方法的類為:",cls)
        return a+b

    # 定義私有方法
    def __func03(self):
        print("這個是私有方法")

    # 定義公共的開放方法來訪問這個私有方法
    def open(self):
        return self.__func03()



p1=Person("小白",14,"大街一號")

# 物件通過開放方法來訪問私有方法
p1.open()

# 類通過開放方法來訪問私有方法
Person("ming",45,"四號街").open()