1. 程式人生 > >python day18--面向物件,繼承

python day18--面向物件,繼承

# class Animal:
#     breath = '呼吸'
#
#     def __init__(self, name, sex, age):
#         self.name = name
#         self.sex = sex
#         self.age = age
#
#     def eat(self):
#         print(self)
#         print('動物都需要進食....')
#
#
# class Person(Animal):  # 括號裡面的 父類,基類,超類   括號外面的 子類,派生類.
#     pass
# # # class Cat: # pass # # # class Dog: # pass # # # p1 = Person('alex', 'laddyboy', 1000) # print(p1.__dict__) # 初識繼承: # 子類以及子類例項化的物件 可以訪問父類的任何方法或變數. # 類名可以訪問父類所有內容 # print(Person.breath) # Person.eat(111) # 子類例項化的物件也可以訪問父類所有內容 # print(p1.breath) # print(p1) # p1.eat()
class Animal:

    
def __init__(self, name, sex, age): self.name = name self.sex = sex self.age = age def eat(self): print('%s吃' % (self.name)) def drink(self): print('%s喝東西' % (self.name)) class Cat(Animal): def miaow(self): print('喵喵叫') # def eat(self): # 只執行自己類中的方法
# print(666) class Brid(Animal): def __init__(self, name,sex,age,wing): # self b1物件 name '鸚鵡',sex '公',age 20, wing '綠翅膀' ''' self=b1物件 name='鸚鵡' sex='公' age= 20, wing='綠翅膀' ''' # Animal.__init__(self, name, sex, age) super().__init__(name,sex,age) # super(Brid,self).__init__(name,sex,age) self.wing = wing def bark (self): print('嗷嗷叫') def eat(self): super().eat() print('鳥吃蟲子...') class Chook(Animal): def crow(self): print('大爺laiwanya') # cat1 = Cat('tom','公', 3) # # cat1.eat() # 只執行父類的方法:子類中不要定義與父類同名的方法 # 只執行子類的方法:在子類建立這個方法. # 既要執行子類的方法,又要執行父類的方法? # 有兩種解決方法. # 1,Animal.__init__(self, name, sex, age) # 1,super().__init__(name,sex,age) # cat1 = Cat('tom','公', 3,)
# 繼承的進階
# 繼承: 單繼承,多繼承.


# 類: 經典類, 新式類
# 新式類: 凡是繼承object類都是新式類.
# python3x 所有的類都是新式類,因為python3x中的類都預設繼承object.
# class A:
# pass
# 經典類: 不繼承object類都是經典類
#python2x:(既有新式類,又有經典類) 所有的類預設都不繼承object類,所有的類預設都是經典類.你可以讓其繼承object.

# 單繼承: 新式類,經典類查詢順序一樣.


# 多繼承:
# 新式類: 遵循廣度優先.
# 經典類: 遵循深度優先.

# 多繼承的新式類 廣度優先 : 一條路走到倒數第二級,判斷,如果其他路能走到終點,則返回走另一條路.如果不能,則走到終點.


# class A:
#     def func(self):
#         print('IN A')
#
# class B(A):
#     pass
#     # def func(self):
#     #     print('IN B')
#
# class C(A):
#     pass
#     # def func(self):
#     #     print('IN C')
#
# class D(B):
#     pass
#     # def func(self):
#     #     print('IN D')
#
# class E(C):
#     pass
#     # def func(self):
#     #     print('IN E')
#
# class F(D,E):
#     pass
#     # def func(self):
#     #     print('IN F')
#
# f1 = F()
# f1.func()


# class A:
#     def func(self):
#         print('IN A')
#
# class B(A):
#     pass
#     # def func(self):
#     #     print('IN B')
#
# class C(A):
#     pass
#     # def func(self):
#     #     print('IN C')
#
# class D(B):
#     pass
#     # def func(self):
#     #     print('IN D')
#
# class E(C):
#     def func(self):
#         print('IN E')
#
# class F(D,E):
#     pass
#     # def func(self):
#     #     print('IN F')
#
# f1 = F()
# f1.func()
#
# print(F.mro())  # 查詢類的繼承順序
# 多繼承的經典類  深度優先 : 一條路走到底.