日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Python高級編程之面向?qū)ο?/div>

一、概述

成都創(chuàng)新互聯(lián)專注于綦江企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城網(wǎng)站建設(shè)。綦江網(wǎng)站建設(shè)公司,為綦江等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

科班出身的同學(xué)應(yīng)該學(xué)過C語言、C++或者Java,編程語言一般分為兩種設(shè)計(jì)方式:面向過程編程、面向?qū)ο缶幊蹋缙诘木幊陶Z言多數(shù)是面向過程的,像C語言就是面向過程編程,面向過程由多個(gè)過程組合在一起,也可以理解為函數(shù)編程,而Python在設(shè)計(jì)的時(shí)候就是一種面向?qū)ο缶幊痰恼Z言,其實(shí)python把面向?qū)ο蠛喕撕芏?,如果學(xué)過java的同學(xué)再來學(xué)習(xí)python面向?qū)ο缶蜁杏X非常簡單。所以本篇文章就讓我?guī)е蠹襾韺W(xué)習(xí)一下什么是面向?qū)ο缶幊獭?/p>

二、面向?qū)ο蟮母拍罱榻B

類(Class)——用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個(gè)對象所共有的屬性和方法。對象是類的實(shí)例。

類方法——類中定義的函數(shù)。

類屬性——屬性就是類變量。

方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進(jìn)行改寫,這個(gè)過程叫方法的覆蓋(override),也稱為方法的重寫。

實(shí)例變量——在類的聲明中,屬性是用變量來表示的,這種變量就稱為實(shí)例變量,實(shí)例變量就是一個(gè)用 self 修飾的變量。

繼承——即一個(gè)派生類(derived class)繼承基類(base class)的字段和方法。繼承也允許把一個(gè)派生類的對象作為一個(gè)基類對象對待。例如,有這樣一個(gè)設(shè)計(jì):一個(gè)Dog類型的對象派生自Animal類,這是模擬"是一個(gè)(is-a)"關(guān)系(例圖,Dog是一個(gè)Animal)。

實(shí)例化——?jiǎng)?chuàng)建一個(gè)類的實(shí)例,類的具體對象。

對象——通過類定義的數(shù)據(jù)結(jié)構(gòu)實(shí)例。對象包括兩個(gè)數(shù)據(jù)成員:屬性和方法。

對象可以分為兩個(gè)部分:一部分稱為屬性(變量),一部分稱為行為(方法)。

1)類定義

語法格式如下:

class ClassName:
    
    .
    .
    .
    

示例如下:

#!/usr/bin/python3
 
class MyClass:
    """一個(gè)簡單的類實(shí)例"""
    i = 12345
    def f(self):
        return 'hello world'
 
# 實(shí)例化類
x = MyClass()
 
# 訪問類的屬性和方法
print("MyClass 類的屬性 i 為:", x.i)
print("MyClass 類的方法 f 輸出為:", x.f())

2)類屬性

python類屬性分為:私有屬性和公開屬性,python是沒有什么修飾符的,像java就分的更細(xì)致,通過private(私有級)、protected(受保護(hù)級)、無前綴(默認(rèn)級)、public(公開級)控制權(quán)限。

  • 私有屬性(__private_attrs):兩個(gè)下劃線開頭,聲明該屬性為私有,不能在類的外部被使用或直接訪問。在類內(nèi)部的方法中使用時(shí) self.__private_attrs。
  • 公開屬性(private_attrs):不帶兩個(gè)下劃線開頭,可以在類外訪問,通過實(shí)例名訪問,也可以在類中訪問。

示例如下:

#!/usr/bin/python3
 
class JustCounter:
    __secretCount = 0  # 私有變量
    publicCount = 0    # 公開變量
 
    def count(self):
        self.__secretCount += 1
        self.publicCount += 1
        print (self.__secretCount)
 
counter = JustCounter()
counter.count()
counter.count()
print (counter.publicCount)
print (counter.__secretCount)  # 報(bào)錯(cuò),實(shí)例不能訪問私有變量

3)類方法

類方法也是分為:私有方法和公開方法,但是私有變量屬性一把通過set/get公開方法操作。示例如下:

class Parents(object):
    __name = "test"
    __age = 35
    
    # 設(shè)置姓名
    def set_name(self, name):
        self.__name = name
    
    # 獲取姓名
    def get_name(self):
        return self.__name
        
    # 設(shè)置年齡
    def set_age(self, age):
        self.__age = age
    
    # 獲取年齡
    def get_age(self):
        return self.__age

if __name__ == "__main__":
    # 實(shí)例化
    p = Parents()
    # 調(diào)用公有方法去設(shè)置屬性
    p.set_age(30)
    # 獲取私有屬性
    print(p.get_age())
    
    # 調(diào)用公有方法去設(shè)置屬性
    p.set_name("zhangsan")
    # 獲取私有屬性
    print(p.get_name())

【溫馨提示】self 的名字并不是固定的,也可以使用 this,但是最好還是按照約定使用 self。

4)構(gòu)造方法(init)

init : 構(gòu)造函數(shù),在生成對象時(shí)調(diào)用。

示例如下:

class Parents(object):
    __name = "test"
    __age = 35
    
    def __init__(self, name, age):
        self.__name = name
        self.__age = age
    
    # 設(shè)置姓名
    def set_name(self, name):
        self.__name = name
    
    # 獲取姓名
    def get_name(self):
        return self.__name
        
    # 設(shè)置年齡
    def set_age(self, age):
        self.__age = age
    
    # 獲取年齡
    def get_age(self):
        return self.__age

if __name__ == "__main__":
    # 實(shí)例化
    p = Parents(25, "lisi")
    # 獲取私有屬性
    print(p.get_age())
    # 獲取私有屬性
    print(p.get_name())

不單單有構(gòu)建函數(shù),還有其它專有的函數(shù),都是自動去調(diào)用的:

  • __init__ : 構(gòu)造函數(shù),在生成對象時(shí)調(diào)用
  • __del__ : 析構(gòu)函數(shù),釋放對象時(shí)使用
  • repr : 打印,轉(zhuǎn)換
  • setitem : 按照索引賦值
  • getitem: 按照索引獲取值
  • len: 獲得長度
  • cmp: 比較運(yùn)算
  • call: 函數(shù)調(diào)用
  • add: 加運(yùn)算
  • sub: 減運(yùn)算
  • mul: 乘運(yùn)算
  • truediv: 除運(yùn)算
  • mod: 求余運(yùn)算
  • pow: 乘方

三、面向?qū)ο蠓庋b、繼承和多態(tài)

面向?qū)ο缶幊逃腥筇攸c(diǎn):封裝、繼承和多態(tài)。

1)封裝

就是將一個(gè)類的屬性、方法全部包裝到了一個(gè)類中。一般設(shè)置屬性為私有的,通過方法去調(diào)用,當(dāng)然有些方法只需要在類內(nèi)部使用也是可以設(shè)置成私有的方法的,通過公開的方法來供外部間接調(diào)用這些“封裝”好的屬性和方法,這就是封裝。

其實(shí)上面的示例就是很好的證明,內(nèi)部定義私有屬性,外部通過公開的方法訪問。

class Parents(object):
    __name = "test"
    __age = 35
    
    def __init__(self, name, age):
        self.__name = name
        self.__age = age
    
    # 設(shè)置姓名
    def set_name(self, name):
        self.__name = name
    
    # 獲取姓名
    def get_name(self):
        return self.__name
        
    # 設(shè)置年齡
    def set_age(self, age):
        self.__age = age
    
    # 獲取年齡
    def get_age(self):
        return self.__age

if __name__ == "__main__":
    # 實(shí)例化
    p = Parents(25, "lisi")
    # 獲取私有屬性
    print(p.get_age())
    # 獲取私有屬性
    print(p.get_name())

2)繼承

繼承就非常好理解了,其實(shí)通過字面意思理解就行了,一個(gè)類是另一個(gè)類的子類,那么這個(gè)類就可以擁有和父類一樣的屬性、方法。這就好比是現(xiàn)實(shí)當(dāng)中,兒子繼承父母的遺產(chǎn)一樣。但是需要注意的是私有屬性和私有方法是無法繼承的,其它語言也是一樣的。

在Python中,所有類默認(rèn)繼承object類,object類是頂級類或基類;其他子類叫做派生類。

示例如下:

class Animal(object):
    # 無法給繼續(xù)子類
    __name = ""
    # 可以繼承給子類
    color = ""

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

    # 可以繼承給子類
    def set_name(self, name):
        self.__name = name

    def get_name(self):
        return self.__name

    def set_color(self, color):
        self.color = color

    # 無法給繼續(xù)子類
    def __get_color(self):
        return self.color

class Cat(Animal):
    def __init__(self, name, color):
        self.name = name
        self.color = color
        # 調(diào)用父類構(gòu)造函數(shù)
        super(Cat, self).__init__(name, color)
        # Animal.__init__(name, color)

    # 重寫父類方法
    def set_name(self, name):
        self.name = name

    # 重寫父類方法
    def get_name(self):
        return self.name

if __name__ == "__main__":
    c = Cat("小貓", "黑色")
    # 獲取父類公開屬性
    print(c.color)

    # 調(diào)用子類方法重寫的方法
    c.set_name("大貓")

多繼承:所謂多繼承意思就是一個(gè)類同時(shí)繼承了多個(gè)父類

示例如下:

#類定義
class people:
    #定義基本屬性
    name = ''
    age = 0
    #定義私有屬性,私有屬性在類外部無法直接進(jìn)行訪問
    __weight = 0
    #定義構(gòu)造方法
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print("%s 說: 我 %d 歲。" %(self.name,self.age))
 
#單繼承示例
class student(people):
    grade = ''
    def __init__(self,n,a,w,g):
        #調(diào)用父類的構(gòu)函
        people.__init__(self,n,a,w)
        self.grade = g
    #覆寫父類的方法
    def speak(self):
        print("%s 說: 我 %d 歲了,我在讀 %d 年級"%(self.name,self.age,self.grade))
 
#另一個(gè)類,多重繼承之前的準(zhǔn)備
class speaker():
    topic = ''
    name = ''
    def __init__(self,n,t):
        self.name = n
        self.topic = t
    def speak(self):
        print("我叫 %s,我是一個(gè)演說家,我演講的主題是 %s"%(self.name,self.topic))
 
#多重繼承
class sample(speaker,student):
    a =''
    def __init__(self,n,a,w,g,t):
        student.__init__(self,n,a,w,g)
        speaker.__init__(self,n,t)
 
test = sample("Tim",25,80,4,"Python")
test.speak()   #方法名同,默認(rèn)調(diào)用的是在括號中參數(shù)位置排前父類的方法

3)子類重新方法和super()調(diào)用父類方法

class Parent:        # 定義父類
   def myMethod(self):
      print ('調(diào)用父類方法')
 
class Child(Parent): # 定義子類
   # 重新父類方法
   def myMethod(self):
      print ('調(diào)用子類方法')
 
c = Child()          # 子類實(shí)例
c.myMethod()         # 子類調(diào)用重寫方法
super(Child,c).myMethod() #用子類對象調(diào)用父類已被覆蓋的方法

4)多態(tài)

多態(tài)首先是建立在繼承的基礎(chǔ)上的,先有繼承才能有多態(tài)。多態(tài)是指不同的子類在繼承父類后分別都重寫覆蓋了父類的方法,即父類同一個(gè)方法,在繼承的子類中表現(xiàn)出不同的形式。多態(tài)成立的另一個(gè)條件是在創(chuàng)建子類時(shí)候必須使用父類new子類的方式。

示例如下:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def print_age(self):
        print("%s's age is %s" % (self.name, self.age))

class Man(Person):
    def print_age(self):
        print("Mr. %s's age is %s" %(self.name, self.age))
class Woman(Person):
    def print_age(self):
        print("Ms. %s's age is %s" %(self.name, self.age))

def person_age(person):
    person.print_age()

if __name__ == "__main__":
    person = Person("kevin", 23)
    man = Man("Bob", 33)
    woman = Woman("Lily", 28)
    person_age(person)
    person_age(man)
    person_age(woman)

【總結(jié)】其實(shí)多態(tài)也很好理解,就是將不同的對象傳到相同的函數(shù),表現(xiàn)不同的形態(tài),這就是多態(tài)。


當(dāng)前文章:Python高級編程之面向?qū)ο?
本文來源:http://www.dlmjj.cn/article/ccsjigc.html