1. 程式人生 > >三十九、python面向對象一

三十九、python面向對象一

對象 創建對象 ica 多個 普通 ret super 面向對象 技術

A、python面向對象
1.面向對象基礎:面向對象三個特性:封裝,繼承,多態
C# java 只能用面向對象編程
Ruby,python 函數+面向對象
函數式編程:def 函數
def f1(a):
return "f1"
def f2(b):
return "f2"

f1("www")
f2("aaa")

面向對象式編程,類,def 方法
class Func:
def f1(self,a):
return "f1"
def f2(self,b):
return "f2"

obj=Func()
obj.f1("www")
obj. f2("aaa")
‘‘‘


‘‘‘
2.self:形式參數,代指執行方法中的對象,python內部傳遞
類+括號:自動執行類中的__init__方法,初始化
在__init__方法中執行具體的封裝方法
__init__有個特殊的名字:構造方法

3.封裝:
使用場景一:當同一類型的方法具有相同的參數時,直接封裝到對象中即可
使用場景一:把類當做模板,創建多個對象(對象內封裝的數據可以不一樣)

class Func:

def __init__(self,bk):
‘‘‘
該方法叫做構造方法
:param bk:
‘‘‘
#普通字段
self.b=bk

def f1(self,a):
print("f1",self.b)

def f2(self,c):
print("f2", self.b)

def f3(self,d):
print("f2", self)

def __del__(self):
‘‘‘
解釋器銷毀對象時自動調用
特殊的名字:析構方法
:return:
‘‘‘
pass
#創建對象實例,並將數據封裝到對象中
obj1=Func(‘www.baidu.com‘)
#封裝
#obj1.b="www.baidu.com"
#執行方法,執行過程中可以根據self去obj中去取已經封裝在裏面的數據
obj1.f1("www")

obj2=Func("www.jd.com")
#obj2.b="www.jd.com"
obj2.f2("www")

‘‘‘
4.繼承:父類(基類)子類(派生類)
  1.派生類可以繼承基類中所有的功能
  2.派生類和基類同時存在,優先派生類
  3.python類中可以同時繼承多個類(java等不可以)
  4.多繼承 優先:自己,先左邊後右邊
  5.多繼承見圖

技術分享圖片



class Anical:
def __init__(self,name):
pass

def Eat(self):
print(self.name+"吃0")

def Cry(self):
print(self.name+"叫0")
def f1(self):
print("0")



class Uncle:

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

def du(self):
print("賭")
def f1(self):
print("0.0")

class Pig(Anical,Uncle):

def __init__(self,name):
self.name=name
def Cry1(self):
print(self.name+"叫1")
# def f1(self):
# print("1")
class Dog(Anical):

def __init__(self,name):
self.name=name
def Cry2(self):
print(self.name+"叫2")

obj1=Pig(‘小白‘)
obj1.du()
obj1.Cry1()
obj1.Cry()
obj1.Eat()
print(obj1.name)


obj1.f1()
obj2=Anical(‘小黑‘)
obj2.f1()
多繼承例子:深度優先
class A:
def f(self):
self.f1()

class B(A):
def f1(self):
print("B")

class C:
def f1(self):
print("C")

class D(C,B):
def f2(self):
print("D")

d=D()
d.f()
---------------------------------------
C
多繼承:廣度優先

class Person:

def f(self):
print("Person")
class A(Person):
def f1(self):
print("A")

class B(Person):
def f1(self):
print("B")

class C(A):
def f2(self):
print("C")

class D(B):
def f(self):
print("D")
class E(C,D):
def f2(self):
print("E")

d=E()
d.f()
-----------------------------------
D

5、多態:每個參數都可以傳多種參數
多種形態
pyhton本身支持多態
擴展:
重載:函數名相同,參數不同(python不支持)
重寫:派生類中重新實現基類的方法

6、super執行父類中的構造方法
class Animal:
def __init__(self):
print("A的構造方法")
self.ty="動物"


class Cat(Animal):
def __init__(self):
print("Cat的構造方法")
self.n="貓"
super(Cat,self).__init__() #執行父類的構造方法
#Animal.__init__(self) #執行父類的構造方法

c=Cat()
print(c.__dict__)
----------------------------------------------------------------

  Cat的構造方法
  A的構造方法
  {‘n‘: ‘貓‘, ‘ty‘: ‘動物‘}












三十九、python面向對象一