1. 程式人生 > 資訊 >HTC VIVE Focus 3 韌體更新 3.0.999.284 釋出,提高 VR 的手部追蹤準確性

HTC VIVE Focus 3 韌體更新 3.0.999.284 釋出,提高 VR 的手部追蹤準確性

目錄

一. 繼承(重要)

1.1 概念

  1. 什麼是繼承?

    繼承就是新建類的一種方式,新建的類我們稱為子類或者叫派生類,被繼承的類我們稱為父類或者基類,子類可以使用父類中的屬性或者方法

  2. 為什麼要用繼承?

    類解決了物件與物件之間的程式碼冗餘問題

    繼承解決的是類與類之間的程式碼冗餘問題

  3. 如何使用繼承?

    新式類:繼承了object類的子子孫孫類都是新式類

    經典類:沒有繼承了object類的子子孫孫類都是經典類

    ps:新式類和經典類只有在python2中區分

1.2 類的繼承

1.3 單繼承下屬性查詢

class Foo:
    def f1(self):
        print('Foo.f1')

    def f2(self):
        #
        print('Foo.f2')
        self.f1()


class Bar(Foo):
    def f1(self):
        print('Bar.f1')


obj = Bar()  # {}
obj.f2()

練習:

class Foo:
    def __f1(self):  # _Foo__f1()
        print('Foo.f1')

    def f2(self):
        print('Foo.f2')
        self.__f1()  # _Foo__f1()


class Bar(Foo):
    def __f1(self):  # # _Bar__f1()
        print('Bar.f1')


obj = Bar()  
obj.f2()

1.4 多繼承下的屬性查詢

bases用法:

print(類名加_ _ bases _ _) 是檢視該類所有的父類

# 新式類:按照廣度優先查詢
# 經典類:按照深度優先查詢
class A(object):
    def test(self):
        print('from A')


class B(A):
    # def test(self):
    #     print('from B')
    pass

class C(A):
    # def test(self):
    #     print('from C')
    pass


class D(B):
    # def test(self):
    #     print('from D')
    pass

class E(C):
    # def test(self):
    #     print('from E')
    pass


class F(D, E):
    # def test(self):
    #     print('from F')
    pass


f1 = F()
f1.test()

1.5 super()

作用:super( ) 是呼叫父類的屬性或方法

super()的應用場景:
子類可以派生出自己新的屬性,在進行屬性查詢時,子類中的屬性名會優先於父類被查詢,我們既想使用父類的屬性, 又想賦予子類新的屬性,這時就需要使用super().

查詢順序也遵循mro列表

1.5 mro列表(瞭解)

對於你定義的每一個類,Python都會計算出一個方法解析順序(MRO)列表,該MRO列表就是一個簡單的所有基類的線性順序列表,如下:

# mro列表練習2 
class B:
    def test(self):
        print('B---->test')

    def aaa(self):
        print('B---->aaa')

class A:
    def test(self):
        print('A---->test')
        super().aaa()


class C(A, B):
    def aaa(self):
        print('C----->aaa')


c = A()
# c.test()  # 列印結果:
print(A.mro())

二. 多型與多型多樣性

1. 什麼是多型
水:液態水,固態水,氣態水
動物:人,豬,狗,貓 ...



# 抽象類: 抽象類只能被繼承,不能被例項化
class Animal(metaclass=abc.ABCMeta):

    @abc.abstractmethod  # 該方法已經是抽象方法了
    def speak(self): pass

    @abc.abstractmethod
    def login(self):pass

class People(Animal):
    def speak(self):
        # print('嗷嗷嗷')
        pass
    def login(self):
        pass


class Pig(Animal):
    def speak(self):
        print('哼哼哼')


class Dog(Animal):
    def speak(self):
        print('汪汪汪')


obj = People()
obj.speak()


# 多型練習
class Pig():
    def speak(self):
        print('哼哼哼')


class Dog():
    def speak(self):
        print('汪汪汪')

class Txt():
    def speak(self):
        print('Txt')

obj = People()
obj1 = Pig()
obj2 = Dog()
obj3 = Txt()

# 多型帶來的特性:在不用考慮物件資料型別的情況下,直接呼叫對應的函式

def animal(animal):
    return animal.speak()

animal(obj)
animal(obj1)
animal(obj2)
animal(obj3)

# 父類限制子類的行為
class Animal():
    def speak(self):
        raise Exception("必須實現speak方法")