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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
python面向?qū)ο筇匦缘慕榻B-創(chuàng)新互聯(lián)

面向?qū)ο缶幊?br/>

面向?qū)ο?Object Oriented,OO)是當(dāng)前計算機界關(guān)心的重點,它是90年代軟件開發(fā)方法的主流。面向?qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計和軟件開發(fā),擴展到很寬的范圍。如數(shù)據(jù)庫系統(tǒng)、交互式界面、應(yīng)用結(jié)構(gòu)、應(yīng)用平臺、分布式系統(tǒng)、網(wǎng)絡(luò)管理結(jié)構(gòu)、CAD技術(shù)、人工智能等領(lǐng)域。

延津ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

特性:

(1)對象唯一性

每個對象都有自身唯一的標(biāo)識,通過這種標(biāo)識,可找到相應(yīng)的對象。在對象的整個生命期中,它的標(biāo)識都不改變,不同的對象不能有相同的標(biāo)識。

(2)分類性

分類性是指將具有一致的數(shù)據(jù)結(jié)構(gòu)(屬性)和行為(操作)的對象抽象成類。一個類就是這樣一種抽象,它反映了與應(yīng)用有關(guān)的重要性質(zhì),而忽略其他一些無關(guān)內(nèi)容。任何類的劃分都是主觀的,但必須與具體的應(yīng)用有關(guān)。

(3)繼承性

繼承性是子類自動共享父類數(shù)據(jù)結(jié)構(gòu)和方法的機制,這是類之間的一種關(guān)系。在定義和實現(xiàn)一個類的時候,可以在一個已經(jīng)存在的類的基礎(chǔ)之上來進行,把這個已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容,并加入若干新的內(nèi)容。

繼承性是面向?qū)ο蟪绦蛟O(shè)計語言不同于其它語言的最重要的特點,是其他語言所沒有的。

在類層次中,子類只繼承一個父類的數(shù)據(jù)結(jié)構(gòu)和方法,則稱為單重繼承。

在類層次中,子類繼承了多個父類的數(shù)據(jù)結(jié)構(gòu)和方法,則稱為多重繼承。

在軟件開發(fā)中,類的繼承性使所建立的軟件具有開放性、可擴充性,這是信息組織與分類的行之有效的方法,它簡化了對象、類的創(chuàng)建工作量,增加了代碼的可重性。

采用繼承性,提供了類的規(guī)范的等級結(jié)構(gòu)。通過類的繼承關(guān)系,使公共的特性能夠共享,提高了軟件的重用性。

(4)多態(tài)性(多形性)

多態(tài)性是指相同的操作或函數(shù)、過程可作用于多種類型的對象上并獲得不同的結(jié)果。不同的對象,收到同一消息可以產(chǎn)生不同的結(jié)果,這種現(xiàn)象稱為多態(tài)性。

多態(tài)性允許每個對象以適合自身的方式去響應(yīng)共同的消息。

多態(tài)性增強了軟件的靈活性和重用性。

優(yōu)點: 易維護、易復(fù)用、易擴展,由于面向?qū)ο笥蟹庋b、繼承、多態(tài)性的特性,
可以設(shè)計出低耦合 的系統(tǒng),使系統(tǒng)更加靈活、更加易于維護
缺點:
性能比面向過程低

01_面向?qū)ο罄斫?py

class Student(object):
   """封裝學(xué)生類"""
   def __init__(self, sid, name, score1, score2):
     """封裝了學(xué)生屬性信息"""
     self.sid = sid
     self.name = name
     self.score1 = score1
     self.score2 = score2

   def show(self):
     pass

   def compute_sum_score(self):
     return self.score1 + self.score2

   def compute_avg_score(self):
     return  (self.score1 + self.score2)/2

stu1 = Student(sid='001', name='張三', score1=100, score2=90)
print(stu1.compute_sum_score())
stu2 = Student(sid='002', name='張三', score1=100, score2=100)
print(stu2.compute_avg_score())"""

類(Class) 是現(xiàn)實或思維世界中的實體在計算機中的反映,它將數(shù)據(jù)以及這些數(shù)
據(jù)上的操作封裝在一起。
對象(Object) 是具有類類型的變量。類和對象是面向?qū)ο缶幊碳夹g(shù)中的最基本的概
念。
對象和類

  1. 如何定義類?
    class 類(): pass
  2. 如何將類轉(zhuǎn)換成對象?
    實例化 是指在面向?qū)ο蟮木幊讨?把用類創(chuàng)建對象的過程稱為實例化。是將一個抽象的概
    念類,具體到該類實物的過程。實例化過程中一般由類名 對象名 = 類名(參數(shù)1,參數(shù)2...參數(shù)n)
    構(gòu)成。
    對象和類
    類(Class) 是是創(chuàng)建實例的模板
    對象(Object) 是一個一個具體的實例

    02_類的定義.py

#class 類名稱:   定義類的方式
class Person:
   #占位關(guān)鍵字, 什么也不做
   pass
print(Person)    #  存儲于當(dāng)前腳本的Person類

#對象:將類實例化/具體化產(chǎn)生的值
personObj = Person()
#<__main__.Person object at 0x7f28164b04d0>
#當(dāng)前腳本的Person類實例化出來的對象存儲的內(nèi)存地址是0x7f28164b04d0
print(personObj)

#Python自帶的類
from datetime import  datetime
from datetime import date
from collections import  defaultdict

03_構(gòu)造方法的理解.py

#構(gòu)造方法__init__與其他普通方法不同的地方在于,當(dāng)一個對象被創(chuàng)建后(實例化),會立即調(diào)
#用構(gòu)造方法。自動執(zhí)行構(gòu)造方法里面的內(nèi)容。
class Student:
   # 實例化對象的過程中自動執(zhí)行的函數(shù)
   def __init__(self):     # self是形參還是實參? - 形參
     # self是什么? self實質(zhì)上實例化出來的對象。系統(tǒng)自動將實例化的對象傳遞給構(gòu)造方法。
     print("self: ", self)
     print("正在運行構(gòu)造方法........")

print(Student)    # 
#實例化產(chǎn)生對象的過程
stu1 = Student()
print("stu1: ", stu1)

封裝特性
面向?qū)ο蟮娜筇匦允侵?封裝、繼承和多態(tài)
封裝,顧名思義就是將內(nèi)容封裝到某個地方,以后再去調(diào)用被封裝在某處的內(nèi)容。
所以,在使用面向?qū)ο蟮姆庋b特性時,需要:
1). 將內(nèi)容封裝到某處
2). 從某處調(diào)用被封裝的內(nèi)容
1). 通過對象直接調(diào)用被封裝的內(nèi)容: 對象.屬性名
2). 通過self間接調(diào)用被封裝的內(nèi)容: self.屬性名
3). 通過self間接調(diào)用被封裝的內(nèi)容:
self.方法名()
構(gòu)造方法init與其他普通方法不同的地方在于,當(dāng)一個對象被創(chuàng)建后,會立即調(diào)
用構(gòu)造方法。自動執(zhí)行構(gòu)造方法里面的內(nèi)容。
對于面向?qū)ο蟮姆庋b來說,其實就是使用構(gòu)造方法將內(nèi)容封裝到 對象 中,然后通過
對象直接或者self間接獲取被封裝的內(nèi)容

04_如何實現(xiàn)數(shù)據(jù)的封裝.py

class Student:
   def __init__(self, name, score1, score2):
     # 將對象和屬性封裝在一起
     self.name = name
     self.score1 = score1
     self.score2 = score2
     #print("self.name: ", self.name)

   def compute_sum_score(self):
     #獲取封裝的屬性信息方法一: , 通過對象名.屬性名的方式獲取。
     return  self.score1 + self.score2

stu1 = Student(name="張三", score1=100, score2=100)

#獲取封裝的屬性信息方法二: , 通過對象名.屬性名的方式獲取。
print("學(xué)生姓名: ",  stu1.name)
sum_scores = stu1.compute_sum_score()
print("總分?jǐn)?shù): ", sum_scores)

創(chuàng)建一個類People,擁有的屬性為姓名, 性別和年齡, 擁有的方法為購物,玩游戲,學(xué)習(xí);實例化
對象,執(zhí)行相應(yīng)的方法。 顯示如下:
小明,18歲,男,去西安賽格購物廣場購物
小王,22歲,男,去西安賽格購物廣場購物
小紅,10歲,女,在西部開源學(xué)習(xí)

05_封裝練習(xí)題目.py

class People:
   print("正在創(chuàng)建類對象..........")
   def __init__(self, name, age, gender):
     self.name = name
     self.age = age
     self.gender = gender

   def shopping(self):
     print("%s,%d歲,%s,去西安賽格購物廣場購物" %(self.name, self.age, self.gender))
   def playGame(self):
     pass
   def learning(self):
     pass

#當(dāng)定義類的時候, 類內(nèi)容是否會執(zhí)行?  會執(zhí)行
#stu1 = People('xx', 10, 'xxx')"""

繼承特性
面向?qū)ο蟮娜筇匦允侵?封裝、繼承和多態(tài)

  1. 繼承
  2. 多繼承
  3. 私有屬性與私有方法
    繼承描述的是事物之間的所屬關(guān)系,當(dāng)我們定義一個class的時候,可以從某個現(xiàn)有的class
    繼承,新的class稱為子類、擴展類(Subclass),而被繼承的class稱為基類、父類或超類(Baseclass、
    Superclass)
    重寫父類方法: 就是子類中,有一個和父類相同名字的方法,在子類中的方法
    會覆蓋掉父類中同名的方法。

    06_單繼承特性.py

問題一: 如何讓實現(xiàn)繼承?
     子類在繼承的時候,在定義類時,小括號()中為父類的名字

問題二: 繼承的工作機制是什么?
   父類的屬性、方法,會被繼承給子類。
   舉例如下:
     如果子類沒有定義__init__方法,父類有,那么在子類繼承父類的時候這個方法就被繼承了,
     所以只要創(chuàng)建對象,就默認(rèn)執(zhí)行了那個繼承過來的__init__方法
#在Python代碼中,沒有指定父類, 默認(rèn)繼承object類。
#父類: object  子類: Student
class Student(object):
   def __init__(self, name, age, gender):
     self.name = name
     self.age = age
     self.gender = gender
   def learn(self):
     print("%s正在學(xué)習(xí)編程......." %(self.name))

#父類: Student  子類: MathStudent
class MathStudent(Student):
   # 重寫父類的learn方法
   #重寫父類方法: 就是子類中,有一個和父類相同名字的方法,在子類中的方法會覆蓋掉父類中同名的方法。
   def learn(self):
     # 方法一: 調(diào)用父類的方法
     #Student.learn(self)
     #方法二: 調(diào)用父類的方法, 自動幫當(dāng)前類尋找父類的名稱
     super(MathStudent, self).learn()
     print("%s正在學(xué)習(xí)英語四級....." %(self.name))

#父類: Student  子類: EnglishStudent
class EnglishStudent(Student):
   pass

s1 = Student("粉條", 10, 'male')
print(s1.name)
#當(dāng)實例化對象, 子類沒有構(gòu)造方法, 自動調(diào)用并執(zhí)行父類的構(gòu)造方法。
s2 = MathStudent("拉格朗日", 100, 'male')
#當(dāng)子類調(diào)用的方法沒有的時候, 自動去父類里面尋找并執(zhí)行。
s2.learn()

07_單繼承特性.py

問題一: 如何讓實現(xiàn)繼承?
     子類在繼承的時候,在定義類時,小括號()中為父類的名字

問題二: 繼承的工作機制是什么?
   父類的屬性、方法,會被繼承給子類。
   舉例如下:
     如果子類沒有定義__init__方法,父類有,那么在子類繼承父類的時候這個方法就被繼承了,
     所以只要創(chuàng)建對象,就默認(rèn)執(zhí)行了那個繼承過來的__init__方法。

#在Python代碼中,沒有指定父類, 默認(rèn)繼承object類。
#父類: object  子類: Student
class Student(object):
   def __init__(self, name, age, gender):
     self.name = name
     self.age = age
     self.gender = gender
   def learn(self):
     print("%s正在學(xué)習(xí)編程......." %(self.name))

#父類: Student  子類: MathStudent
class MathStudent(Student):
   pass

#父類: Student  子類: EnglishStudent
class EnglishStudent(Student):
   pass

s1 = Student("粉條", 10, 'male')
print(s1.name)
#當(dāng)實例化對象, 子類沒有構(gòu)造方法, 自動調(diào)用并執(zhí)行父類的構(gòu)造方法。
s2 = MathStudent("拉格朗日", 100, 'male')
#當(dāng)子類調(diào)用的方法沒有的時候, 自動去父類里面尋找并執(zhí)行。
s2.learn()

默認(rèn)情況下,屬性在 Python 中都是“public”, 大多數(shù) OO 語言提供“訪問控
制符”來限定成員函數(shù)的訪問。
在 Python 中,實例的變量名如果以 開頭,就變成了一個私有變量/屬性
(private),實例的函數(shù)名如果以
開頭,就變成了一個私有函數(shù)/方法(private)只
有內(nèi)部可以訪問,外部不能訪問。

08_私有屬性和私有方法.py

#私有屬性和私有方法:

class Student(object):

   需求: 學(xué)生成績保密, 外部不可以訪問分?jǐn)?shù), 只可以訪問分?jǐn)?shù)的等級

   def __init__(self, name, age, score):
     self.name = name
     self.age = age
     #self.__score是私有屬性, 只能在類的內(nèi)部訪問, 類的外部不可以訪問。
     self.__score = score

   #__get_level是私有方法,只能在類的內(nèi)部訪問, 類的外部不可以訪問。
   def __get_level(self):
     if 90 <= self.__score <= 100:
       return "優(yōu)秀"
     elif 80 <= self.__score < 90:
       return "良好"
     elif 60 <= self.__score < 80:
       return "及格"
     else:
       return "不及格"

stu1 = Student("粉條", 10, 59)
#print(stu1.__score)                # 調(diào)用私有屬性失敗
#print("學(xué)生分?jǐn)?shù)的等級: ", stu1.__get_level())     # 調(diào)用私有方法失敗

#Python解釋器自動將私有屬性和私有方法重命名了, 命名方式一般是_類名__屬性名、_類名__方法名
print(stu1._Student__score)
print(stu1._Student__get_level())

在Python 2及以前的版本中,由任意內(nèi)置類型派生出的類,都屬于“新式
類”,都會獲得所有“新式類”的特性;反之,即不由任意內(nèi)置類型派生出的類,
則稱之為“經(jīng)典類
“新式類”和“經(jīng)典類”的區(qū)分在Python 3之后就已經(jīng)不存在,在Python 3.x
之后的版本,因為所有的類都派生自內(nèi)置類型object(即使沒有顯示的繼承
object類型),即所有的類都是“新式類”。
最明顯的區(qū)別在于繼承搜索的順序不同,即:
經(jīng)典類多繼承搜索順序(深度優(yōu)先算法):先深入繼承樹左側(cè)查找,然后再返回,開始查找右側(cè)。
新式類多繼承搜索順序(廣度優(yōu)先算法):先在水平方向查找,然后再向上查找,
python面向?qū)ο筇匦缘慕榻B

09_多繼承.py

class TeacherMajor(object):
   def __init__(self, students_count):
     self.student_count = students_count

class DoctorMajor(object):
   def __init__(self, patients_count):
     self.patients_count = patients_count

#子類Student擁有2個父類TeacherMajor和DoctorMajor
class Student(TeacherMajor, DoctorMajor):
   def __init__(self, name, students_count, patients_count):
     self.name = name
     TeacherMajor.__init__(self, students_count)
     DoctorMajor.__init__(self, patients_count)

##繼承的順序如何查看?
#print(Student.__mro__)
stu1 = Student("粉條", 0, 0)
print(stu1.patients_count)
print(stu1.student_count)

#coding:utf-8
#注意: Python2環(huán)境中做實驗
#類D新式類.
class D(object):
   def hello(self):
     print("D...... hello")
class C(D):
   def hello(self):
     print("C...... hello")
class B(D):
   pass
class A(B, C):
   pass

#新式類多繼承搜索順序(廣度優(yōu)先算法):先在水平方向查找,然后再向上查找,
a = A()
a.hello()
#C...... hello

#coding:utf-8
#注意: Python2環(huán)境中做實驗
#類D經(jīng)典類.
class D:
   def hello(self):
     print("D...... hello")
class C(D):
   def hello(self):
     print("C...... hello")
class B(D):
   pass
class A(B, C):
   pass
#經(jīng)典類多繼承搜索順序(深度優(yōu)先算法):先深入繼承樹左側(cè)查找,然后再返回,開始查找右側(cè)。
a = A()
a.hello()
#D...... hello

多態(tài)特性
多態(tài)的好處就是,當(dāng)我們需要傳入更多的子類,只需要繼承父類就可以了,而方法既可以直接
不重寫(即使用父類的),也可以重寫一個特有的。這就是多態(tài)的意思。調(diào)用方只管調(diào)用,不管
細(xì)節(jié),而當(dāng)我們新增一種的子類時,只要確保新方法編寫正確,而不用管原來的代碼。這就是著
名的“開閉”原則:
對擴展開放(Open for extension):允許子類重寫方法函數(shù)
對修改封閉(Closed for modification):不重寫,直接繼承父類方法函數(shù)
棧的封裝
棧是限制在一端進行插入操作和刪除操作的線性表(俗稱堆棧),允許進行操作的一端稱為“棧頂”,
另一固定端稱為“棧底”,當(dāng)棧中沒有元素時稱為“空?!薄O蛞粋€棧內(nèi)插入元素稱為是進棧,push;
從一個棧刪除元素稱為是出棧,pop。特點 :后進先出(LIFO)。
python面向?qū)ο筇匦缘慕榻B
隊列的封裝
隊列是限制在一端進行插入操作和另一端刪除操作的線性表,允許進行插入操作的一端稱為“隊尾”,
允許進行刪除操作的一端稱為“隊頭”,,當(dāng)隊列中沒有元素時稱為“空隊”。特點 :先進先出(FIFO)
python面向?qū)ο筇匦缘慕榻B

12_stack.py

class Stack(object):
   """
   根據(jù)列表的數(shù)據(jù)結(jié)構(gòu)封裝棧的數(shù)據(jù)結(jié)構(gòu)
   屬性: 棧元素stack
   方法:
     get_top()
     get_bootom()
     push()
     pop()
   """
   def __init__(self):
     self.stack = [] # [1, 2, 3]

   def top(self):
     return self.stack[-1]

   def bootom(self):
     return self.stack[0]

   def push(self, item):
     """
     :param item: 入棧元素
     :return:
     """
     self.stack.append(item)
     return True

   def pop(self):
     item = self.stack.pop()
     return item

   def show(self):
     return self.stack

   #魔術(shù)方法, 使得代碼運行更加簡潔
   def __len__(self):
     return len(self.stack)

if __name__ == '__main__':
   stack = Stack()
   print(stack.show())
   #print(stack.top())
   #stack.push(1)
   #stack.push(2)
   #stack.push(3)
   #print("入棧后: ", stack.show())
   #item = stack.pop()
   #print("出棧元素為: ", item)
   #print("出棧后: ", stack.show())
   #print('棧元素個數(shù): ', stack.__len__())
   print('棧元素個數(shù): ', len(stack))

13_二叉樹節(jié)點的封裝.py

class Node(object):
   def __init__(self, data, lchild=None, rchild=None):
     self.data = data
     self.lchild = lchild
     self.rchild = rchild

   #魔術(shù)方法: len(), __len__. str(), __str__
   def __str__(self):  # 友好的字符串顯示信息
     return 'Node<%s>' % (self.data)

def pre_view( root):
   """
   先序遍歷: 根節(jié)點-左子樹節(jié)點-右子樹節(jié)點
   傳遞根節(jié)點
   :param root:
   :return:
   """
   if root == None:
     return
   print(root.data)
   pre_view(root.lchild)
   pre_view(root.rchild)
def last_view(root):
   """
   后序遍歷: -左子樹節(jié)點-右子樹節(jié)點-根節(jié)點
   傳遞根節(jié)點
   :param root:
   :return:
   """
   if root == None:
     return
   last_view(root.lchild)
   last_view(root.rchild)
   print(root.data)

def mid_view(root):
   """
   中序遍歷: -左子樹節(jié)點--根節(jié)點-右子樹節(jié)點
   傳遞根節(jié)點
   :param root:
   :return:
   """
   if root == None:
     return
   mid_view(root.lchild)
   print(root.data)
   mid_view(root.rchild)

if __name__ == '__main__':
   D = Node('D')
   B = Node('B', D)
   C = Node('C')
   A = Node('A', B, C)
   #print("A-left: ", str(A.lchild))
   #print("A-right: ", str(A.rchild))

   #先序遍歷(根左右)、中序遍歷(左根右)、后序遍歷(左右根)
   print("先序遍歷:")
   pre_view(A)
   print("后序遍歷:")
   last_view(A)
   print("中序遍歷:")
   mid_view(A)

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


網(wǎng)站題目:python面向?qū)ο筇匦缘慕榻B-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://www.dlmjj.cn/article/ccpgih.html