一、對象建立之後,屬性指派太麻煩,可以使用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()
二、類變量
"""
class 類名:
變量名 = 值
調用:
指派:
類名.變量名 = 值
取值:
類名.變量名
差別:
1.執行個體變量 > 對象名.變量名
2.類變量 > 類名.變量名
"""
class Student:
#類變量:不會随着對象的改變而發生
info='學生資訊'
# 成員變量:随着對象的改變而發生改變
def __init__(self,name,gender,tel):
self.name=name
self.gender=gender
self.tel=tel
# 類名.變量名
print(Student.info)
"""
在沒有建立對象之前,我們嘗試了類名.執行個體變量名
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()
四、類變量和類方法的使用
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()