天天看點

python 面向對象-類變量和類方法使用(四)

一、對象建立之後,屬性指派太麻煩,可以使用init方法,沒有被調用,怎麼傳參!

class Student:
    # 成員變量
    def __init__(self,name,gender,tel):
        self.name=name
        self.gender=gender
        self.tel=tel

    # 成員方法
    def show(self):
        print(f'{self.name}的性别-{self.gender},她的電話-{self.tel}')

# 構造方法
stu1=Student('samantha','F',110)
stu2=Student('john','M',112)
# 調用方法
stu1.show()
stu2.show()
           
python 面向對象-類變量和類方法使用(四)

二、類變量

"""
class 類名:
    變量名 = 值
調用:
    指派:
        類名.變量名 = 值
    取值:
        類名.變量名
    差別:
    1.執行個體變量 > 對象名.變量名
    2.類變量   > 類名.變量名
"""
           
class Student:
    #類變量:不會随着對象的改變而發生
    info='學生資訊'
    # 成員變量:随着對象的改變而發生改變
    def __init__(self,name,gender,tel):
        self.name=name
        self.gender=gender
        self.tel=tel

# 類名.變量名
print(Student.info)
           
python 面向對象-類變量和類方法使用(四)
"""
在沒有建立對象之前,我們嘗試了類名.執行個體變量名
 Student.name 發生異常:AttributeError: type object 'Student' has no attribute 'name'
"""
print(Student.name)
           
# 建立對象
stu1=Student('samantha','F',110)
"""
類名.執行個體變量名 => 類名無法去調用執行個體變量,Student.gender 會發生異常:AttributeError: type object 'Student' has no attribute 'gender'
對象名.類變量名 => 對象是可以調用類變量,stu1.info
"""
# print(stu1.name,stu1.info,Student.gender)
           

三、類方法

類成員: 為了節約記憶體空間
    1.變量
         類變量 : 直接定義在類裡面,對象的不同不會産生變化,直接歸屬于類管轄
         執行個體變量 : 定義在init方法裡面, self 對象建立之後才會執行, 随着對象不同而發生改變
    
    2.方法
        類方法: 不會随時對象的改變而發生改變
        執行個體方法: 會随着對象的改變而發生改變
           
(1) 類方法
    class 類名:
        @classmethod
        def 方法名(cls, 形參):
            方法體
    
    (2) 執行個體方法
    class 類名:
        def 方法名(self,形參1,形參2,.......):
            方法體
 調用:
    類名.方法名(實參)  **推薦使用
    對象名.方法名(實參)  **不常用

 注意:
  1.類方法: @classmethod   cls類
  2.執行個體方法:              self對象
           
class Student:
    #類變量:不會随着對象的改變而發生
    info='學生資訊'
    # 成員變量:随着對象的改變而發生改變
    def __init__(self,name,gender,tel):
        self.name=name
        self.gender=gender
        self.tel=tel
    #執行個體方法
    def show(self):
        print(f'{self.name}的性别-{self.gender},她的電話-{self.tel}')
    #類方法
    @classmethod
    def myClass(self):
        print('類方法的使用!')

#調用
# 類名.方法名(實參)
Student.myClass()

#建立對象
stu=Student('mike','Man',110)
#對象名.成員變量
print(stu.name,stu.gender)
#對象名.方法名(實參)
stu.show()
           
python 面向對象-類變量和類方法使用(四)

四、類變量和類方法的使用

     1、類方法中不允許使用執行個體變量和執行個體方法。

     2、執行個體方法中允許使用類變量和類方法。 

class Student:
    #類變量:不會随着對象的改變而發生
    __info='學生資訊'

    # 成員變量:随着對象的改變而發生改變
    def __init__(self,name,gender,tel):
        self.name=name
        self.gender=gender
        self.tel=tel

    #執行個體方法
    def show(self):
        print(f'{self.name}的性别-{self.gender},她的電話-{self.tel}')

    #類方法,cls是參數!!!
    @classmethod
    def myClass(cls):
        #通路類方法
        cls.display()
        # 通路類屬性
        print(cls.__info)


    @classmethod
    def display(self):
        print('我是類方法!!')


# 1.執行個體對象.類方法名(實參1,實參2,...)
stu=Student('mike','Man',110)
stu.show()

# 2.類對象.類方法名(實參1,實參2,...)
Student.myClass()
           
python 面向對象-類變量和類方法使用(四)