1. 程式人生 > >python8之面向對象補充之知識點回顧

python8之面向對象補充之知識點回顧

pre def 江蘇 字段 調用方法 python init 父類 沒有

一、self關鍵字

作用:調用當前方法的對象

class Foo:
     
    #靜態字段或者公有屬性
    country = "中國"
 
    def __init__(self,name,count):
        self.name = name
        self.count = count
 
    def bar(self):
        pass
 
obj1 = Foo("江蘇",100000)
obj1.bar

註意:country = "中國" 屬於公有字段,它的作用是:每個對象中保存相同的東西時,可以使用靜態字段

技術分享

二、封裝

  • 類中封裝了 :字段、方法
  • 對象中封裝了:普通字段的值
  • 不僅可以封裝字段,還可以封裝對象
class F1:
    def __init__(self,n):
        self.N = n
        print("F1")
     
class F2:
    def __init__(self,arg1):
        self.a = arg1
        print("F2")
 
class F3:
     
   def __init__(self,arg2):
        self.b = arg2
        print("F3")
 
o1 = F1("alex")
o2 = F2(o1)
o3 =F3(o2)
 
######輸出alex####
# o3 =F3(o2)
o3 ====> o2
 
# o2 = F2(o1)
o3.b.a
 
# o1 = F1("alex")
o1.b.a.N

三、繼承

說明:子類繼承父類,對象調用方法時,先從自己的類中去找,找不到,就會去找父類中的方法。

class F1:
    def __init__(self):
        print(‘F1‘)
 
    def a1(self):
        print("F1a1")
 
    def a2(self):
        print("F1a2")
 
class F2(F1):
    def __init__(self):
        print("F1")
 
    def a1(self):
        print("F2a1")
 
    def a2(self):
        self.a2()
        print("F2a2")
 
class F3(F2):
    def __init__(self):
        print("F3")
 
    def a2(self):
        print("F3a2")
 
obj = F3()
obj.a1()
 
#輸出
F3a2
F2a1

上面代碼訪問的順序如下:

  1. 先去到F3中找a1方法,沒有找到
  2. 到F2父類去找,找到了a1方法,去執行a1方法
  3. 執行過程中需要調用F3中的a2方法

四、靜態方法

4.1 類的組成

  • 字段:1.普通字段(保存在對象中),2靜態字段(保存在類中)
  • 方法:普通方法(保存在類中,用對象去調用)
class F1:
    age = 18  #靜態字段
    def __init__(self,name):
        self.name = name  #普通字段
 
    def a1(self):   #普通方法
        print(‘F1a1‘)

4.2 靜態方法

特點:

  1. 保存在類中
  2. 調用者無需創建對象
  3. 可以有任意個參數
class F1:
     
    @staticmethod   #聲明是靜態方法
    def a1(n1,n2):   #無需傳入對象,但是可以聲明多個值
        print(‘xiaogao‘)
 
 
F1.a1(1,2) #類名.方法名 方式調用

作用:當對象不需要傳入參數時,去創建對象有些浪費,占著資源,所以還不如直接用類名直接去調用,這個類似於函數。

python8之面向對象補充之知識點回顧