1. 程式人生 > 其它 >面向物件進階版

面向物件進階版

面向物件進階版

· 組合

· 面向物件的內建函式

· 反射

· 異常

一、組合

1.什麼是組合?
組合:組合指的是,在一個類中以另外一個類的物件作為資料屬性,稱為類的組合

class People():
    school = 'SH'

    def __init__(self, name, age, gender, ):
        self.name = name
        self.age = age
        self.gender = gender


class Admin(People):
   pass


class Course():
    
def __init__(self, name, period, price, ): self.name = name self.period = period self.price = price python = Course('python', '6mon', 10000) linux = Course('linux', '5mon', 20000) class Student(People, Course): def __init__(self, name, age, gender, course=None): if course is
None: course = [] self.courses = course super().__init__(name, age, gender, ) def choose_course(self, stu_obj, course): stu_obj.courses.append(course)

二、面向物件的內建函式

面向物件內建函式很多,常用內建函式有以下幾個:__init__(),__str__(),__del__(),__enter__(),__exit__(),__call__().....

class Student():
    school = 'SH'

    # 呼叫類的時候觸發
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def tell(self):
        print('name: %s, age: %s' % (self.name, self.age))

    # 列印物件的時候,自動觸發的函式
    # 返回值只能是字串
    def __str__(self):
        return 'name:%s' % self.name
        # return 123
        
       # 1. 手動執行del
    # 2. 程式執行完畢觸發
    def __del__(self):
        print('__del__')
        self.f.close()
    
    
    # 物件加括號自動觸發
    def __call__(self, *args, **kwargs):
        print('__call__')


stu = Student('ly', 20)

三、反射

反射:反射的概念是由Smith在1982年首次提出的,主要是指程式可以訪問、檢測和修改它本身狀態或行為的一種能力(自省)。這一概念的提出很快引發了電腦科學領域關於應用反射性的研究。它首先被程式語言的設計領域所採用,並在Lisp和麵向物件方面取得了成績。

其有四種方法:getattr、setattr、hasattr、delattr

1. getattr
print(getattr(stu, 'name1', None))  # stu.name
stu.func()
print(getattr(stu, 'func'))
getattr(stu, 'func')()  # 必須掌握

2. setattr
setattr(stu, 'x', 123)
print(stu.__dict__)

3. hasattr
print(hasattr(stu, 'name'))

4. delattr
delattr(stu, 'name')
print(stu.__dict__)

四、異常

1.什麼是異常?

異常就是錯誤發生的訊號,如果部隊該訊號做處理,那麼異常之後的程式碼都不會執行

異常的種類:語法錯誤、邏輯錯誤

2.為什麼要用異常

增強程式碼的健壯性

3.怎麼用異常?

 try:
              被監測程式碼
        except 異常的型別:
                  pass
          except 異常的型別:
                  pass
          except 異常的型別:
                  pass
        except Exception as e:
                  pass
        else:
              # 當被監測程式碼沒有發生異常的時候,觸發的
                  pass
        finally:
               不管被監測的程式碼有沒有出錯,都執行   

==================今天的內容就到這裡了,我們下次再見================