1. 程式人生 > >Python學習(十一) Python 類

Python學習(十一) Python 類

count sym == AC val setter 輸入 com ttr

Python 類

面向對象編程是有效的軟件編寫方法之一。

python程序編寫方法

  • 1、函數編程,使用函數方式
  • 2、面向對象編程,使用類方式

創建類

創建方法
    構造方法,__init__(self,arg)
        obj = 類(‘a1‘)
    普通方法
        obj = 類(‘xxx’)
        obj.普通方法名()

格式如下:

class DataBaseHelper:

    def __init__(self, ip, port, username, pwd):
        self.ip = ip
        self.port = port
        self.username = username
        self.pwd = pwd
    
    def add(self,content):
        # 利用self中封裝的用戶名、密碼等   鏈接數據
        print(‘content‘)
        # 關閉數據鏈接
    
    def delete(self,content):
        # 利用self中封裝的用戶名、密碼等   鏈接數據
        print(‘content‘)
        # 關閉數據鏈接
    
    def update(self,content):
        # 利用self中封裝的用戶名、密碼等   鏈接數據
        print(‘content‘)
        # 關閉數據鏈接
        
    def get(self,content):
        # 利用self中封裝的用戶名、密碼等   鏈接數據
        print(‘content‘)
        # 關閉數據鏈接
  #封裝數據庫登陸IP,端口,用戶名,密碼
  s1 = DataBaseHelper(‘1.1.1.1‘,3306, ‘jorbabe‘, ‘6666‘)

面向對象三大特性

面向對象三大特性之一:封裝

使用構造方法封裝相同屬性:

def __init__(self, n,a):
        self.name = n
        self.age = a
        self.xue = ‘o‘
        
b1 = Bar(‘jorbabe‘, 18)
b2 = Bar(‘yunlei‘, 19)

面向對象三大特性之二:繼承

1、繼承

class 父類:
    pass
    
class 子類(父類):
    pass

2、重寫方法 防止執行父類中的方法

3、self永遠是執行改方法的調用者

4、

super(子類, self).父類中的方法(...)

父類名.父類中的方法(self,...)

5、Python中支持多繼承

  • a. 左側優先
  • b. 一條道走到黑
  • c. 同一個根時,根最後執

面向對象三大特性之三:多態

python====> 原生多態,忽略多態,python傳參不用指定參數的類型。
v = ‘jorbabe‘

def func(arg):
    print(arg)
    
    
func(1)
    func(‘jorbabe‘)

類成員

class Foo:
  #靜態字段,屬於類
  country = ‘中國‘

    def __init__(self, name,):
        # 普通字段
        self.name = name

    # 普通方法
    def show(self):
        print(self.name)

obj = Foo(‘jorbabe‘)
obj.name
obj.show()

類成員: 字段

  • 普通字段,保存在對象中,執行只能通過對象訪問
  • 靜態字段,保存在類中, 執行 可以通過對象訪問 也可以通過類訪問

方法

  • 普通方法,保存在類中,由對象來調用,self=》對象
普通方法
    class Foo:
        def bar(self):
            print (‘bar‘)
    #推薦
    obj = Foo()
    obj.bar()

    Foo.bar(obj)
  • 靜態方法,保存在類中,由類直接調用
#類方法
    class Foo:
        def bar(self):
            print (‘bar‘)
        #靜態方法
        @staticmethod
        def sta():
            print (‘sta‘)
        #靜態方法+傳參
        @staticmethod
        def stac(a1,a2):
            print (a1,a2)
    Foo.sta()
    Foo.stac(1,2)

    sta
    1 2
  • 類方法,保存在類中,由類直接調用,cls=》當前類
#類方法
    class Foo:
        def bar(self):
            print (‘bar‘)
        #靜態方法
        @staticmethod
        def sta():
            print (‘sta‘)
        #靜態方法+傳參
        @staticmethod
        def stac(a1,a2):
            print (a1,a2)
        #類方法
        @classmethod
        def classmd(cls):
            #cls:類名
            print (cls)
            print (‘classmd‘)
    
    Foo.classmd()
    
    <class ‘__main__.Foo‘>
    classmd

應用場景:

  • 如果對象中需要保存一些值,執行某功能時,需要使用對象中的值 -> 普通方法
  • 不需要任何對象中的值,靜態方法

屬性

class Foo:
        def __init__(self):
            self.name = ‘a‘
        def bar(self):
            print (‘bar‘)
        #屬性或特性
        @property
        def per(self):
            print (‘per‘)
    
    obj = Foo()
    # obj.per()
    obj.per
  • 調用方式一一對應
class Foo:
        def __init__(self):
            self.name = ‘a‘
        def bar(self):
            print (‘bar‘)
        #屬性或特性。調用方式:obj.per
        @property
        def per(self):
            # print (‘per‘)
            return 1
        #屬性傳參。調用方式:obj.per = 123
        @per.setter
        def per(self,val):
            print (val)
        #屬性參數刪除。調用方式:del obj.per
        @per.deleter
        def per(self):
            print (‘666666‘)
    obj = Foo()
    # obj.per()
    obj.per
    r = obj.per
    print (r)
    obj.per = 123
    
    del obj.per


    1
    123
    666666
中國的所有省份,用面向對象知識表示?

class Province:
    # 靜態字段,屬於類
    country =  ‘中國‘
    
    
    def __init__(self, name):
        # 普通字段,屬於對象
        self.name = name
        
henan = Province(‘河南‘)
henan.name
henan.name = "河南南"


#hebei = Province(‘河北‘)

# Province.country
print (Province.country)
print (henan.name)

中國
河南南
實例:利用屬性功能實現分頁
class Pargination:
    #定義頁碼
    def __init__(self,current_page):
        #判斷是否是整數
        try:
            p = int(current_page)
        except Exception as e:
            p = 1
        #頁碼賦值
        self.page = p
    #計算開始
    @property
    def start(self):
        val = (self.page - 1) * 10
        return val
    #計算結尾
    @property
    def end(self):
        val = self.page * 10
        return val
#定義元組列表
li = []
#定義元組列表賦值
for i in range(1000):
    li.append(i)
while True:
    p = input (‘請輸入要查看的頁碼:‘)
    #給類的方法傳值
    obj = Pargination(p)
    #類方法未添加屬性前的調用方式
    # print (li[obj.start():obj.end()])
    #方法添加屬性後的調用方式,去括號
    print (li[obj.start:obj.end])
請輸入要查看的頁碼:5
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
請輸入要查看的頁碼:6
[50, 51, 52, 53, 54, 55, 56, 57, 58, 59]
請輸入要查看的頁碼:aa
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
請輸入要查看的頁碼:

Python學習(十一) Python 類