一、引入
class OldboyStudent:
school = 'oldboy'
def choose_course(self):
print('is choosing course')
stu1 = OldboyStudent()
stu2 = OldboyStudent()
stu3 = OldboyStudent()
對于上述的學生類,如果類的屬性改了,則其他物件的屬性也會隨之改變
ldboyStudent.school = 'OLDBOY'
print(stu1.school)
OLDBOY
print(stu2.school)
OLDBOY
二、定制物件獨有特征
print(stu1.__dict__)
{}
print(stu2.__dict__)
{}
物件本質類似于類,也是一個名稱空間,但是物件的名稱空間存放物件獨有的名字,而類中存放的是物件們共有的名字,因此我們可以直接為物件單獨定制名字,
stu1.name = 'tank'
stu1.age = 18
stu1.gender = 'male'
print(stu1.name, stu1.age, stu1.gender)
tank 18 male
try:
print(stu2.name, stu2.age, stu2.gender)
except Exception as e:
print(e)
'OldboyStudent' object has no attribute 'name'
stu2.name = 'sean'
stu2.age = 19
stu2.gender = 'female'
print(stu2.name, stu2.age, stu2.gender)
sean 19 female
三、屬性查找
首先從自身查找,沒找到往類中找,類中沒有則會報錯,即物件的屬性查找順序為:自身--》類--》報錯
四、類定義階段定制屬性
def init(obj, x, y, z):
obj.name = x
obj.age = y
obj.gender = z
init(stu1, 'tank1', 181, 'male1')
print(stu1.name, stu1.age, stu1.gender)
tank1 181 male1
init(stu2, 'sean1', 191, 'female1')
print(stu2.name, stu2.age, stu2.gender)
sean1 191 female1
使用上述方法雖然讓我們定制屬性更簡單,但是還是太麻煩了,如果可以在實體化物件的時候自動觸發定時屬性,那就更方便了,因此可以使用類的__init__方法,
class OldboyStudent:
school = 'oldboy'
def __init__(self, name, age, gender):
"""呼叫類的時候自動觸發"""
self.name = name
self.age = age
self.gender = gender
print('*' * 50)
def choose_course(self):
print('is choosing course')
try:
stu1 = OldboyStudent()
except Exception as e:
print(e)
#學習中遇到問題沒人解答?小編創建了一個Python學習交流群:711312441
__init__() missing 3 required positional arguments: 'name', 'age', and 'gender'
stu1 = OldboyStudent('nick', 18, 'male')
**************************************************
通過上述現象可以發現,呼叫類時發生兩件事:
創造一個空物件
自動觸發類中__init__功能的執行,將stu1以及呼叫類括號內的引數一同傳入
print(stu1.__dict__)
{'name': 'nick', 'age': 18, 'gender': 'male'}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/546039.html
標籤:Python
