面向對象基礎-04定製對象獨有特徵

類中定義的函數是類的函數屬性,類能夠使用,但使用的就是一個普通的函數而已,意味着須要徹底遵循函數的參數規則,該傳幾個值就傳幾個python

一丶引入函數

class OldboyStudent:
    school = 'oldboy'

    def choose_course(self):
        print('is choosing course')


stu1 = OldboyStudent()
stu2 = OldboyStudent()
stu3 = OldboyStudent()

對於上述的學生類,若是類的屬性改了,則其餘對象的屬性也會隨之改變
OldboyStudent.school = 'OLDBOY'ui

print(stu1.school)

OLDBOYcode

print(stu2.school)

OLDBOY對象


二丶定製對象特有屬性

print(stu1.__dict__)

{}it

print(stu2.__dict__)

{}
 * 對象本質相似於類,也是一個名稱空間,可是對象的名稱空間存放對象獨有的名字,而類中存放的是對象們共有的名字。所以咱們能夠直接爲對象單獨定製名字。io

stu1.name = 'tank'
stu1.age = 18
stu1.gender = 'male'

print(stu1.name, stu1.age, stu1.gender)

tank 18 maleclass

try:
    print(stu2.name, stu2.age, stu2.gender)
except Exception as e:
    print(e)

'OldboyStudent' object has no attribute 'name'require

stu2.name = 'sean'
stu2.age = 19
stu2.gender = 'female'

print(stu2.name, stu2.age, stu2.gender)

sean 19 femaleobject


三丶屬性查找

 * 首先從自身查找,沒找到往類中找,類中沒有則會報錯。即對象的屬性查找順序爲:自身--》類--》報錯


四丶類定義階段定製屬性

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)

__init__() missing 3 required positional arguments: 'name', 'age', and 'gender'

stu1 = OldboyStudent('nash', 18, 'male')

 * 經過上述現象能夠發現,調用類時發生兩件事:
  * 創造一個空對象
  * 自動觸發類中__init__功能的執行,將stu1以及調用類括號內的參數一同傳入

print(stu1.__dict__)

{'name': 'nash', 'age': 18, 'gender': 'male'}

相關文章
相關標籤/搜索