摘要:類的定義相當于的構(gòu)造函數(shù)方法相當于的方法創(chuàng)建了對象,會自動的調(diào)用方法被調(diào)用被調(diào)用被調(diào)用魔法方法在中,所有的以雙下劃線包起來的方法,都被統(tǒng)稱為魔法方法。所謂多態(tài)定義時的類型和運行時的類型不一樣,此時就成為多態(tài)。
class 類的定義
class Cat(object): def __init__(self,name,age): # 相當于Java的構(gòu)造函數(shù) self.name=name self.age=age print("__init__方法") def __str__(self): # 相當于Java的toString方法 pass def eat(self): print("eat......") def drink(self): print("drink......") tom=Cat("jack",10) # 創(chuàng)建了tom對象,python會自動的調(diào)用__init__()方法 __del__(): class Cat(object): """docstring for test""" def __init__(self,name,age): self.name=name self.age=age print("__init__被調(diào)用") def __del__(self): print("__del__") tom=Cat("name",12) del tom print("=" * 30) Out: __init__被調(diào)用 __del__ ============================== tom=Cat("name",12) print("=" * 30) Out: __init__被調(diào)用 ============================== __del__魔法方法
在python中,所有的以"__"雙下劃線包起來的方法,都被統(tǒng)稱為"魔法方法"。例如上述的__init__和__str__。
魔法方法參考
私有屬性和方法Python中沒有像Java中有public和private這些關(guān)鍵字來區(qū)別公有屬性和私有屬性
Python是以屬性命名方式來區(qū)分,如果在屬性名前面加了2個下劃線"__",則表明該屬性是私有屬性,否則為公有屬性(方法也是一樣,方法名前面加了2個下劃線的話表示該方法是私有的,否則為公有的)。
繼承class Animal: def eat(self): print("-----吃----") def run(self): print("-----跑----") class Dog(Animal): # python繼承關(guān)鍵 def bark(self): print("----汪汪叫---") def run(self): # 重寫 super().run() # 調(diào)用被重寫的父類的方法 dog = Dog() dog.eat()
上述介紹的私有屬性和方法不能被繼承。
多繼承
class Base(object): def test(self): print("----Base") class A(Base): def test1(self): print("-----test1") class B(Base): def test2(self): print("-----test2") class C(A,B): # 多繼承 pass c = C() c.test1() c.test2() c.test()
注意如果父類擁有同名的方法,子類會調(diào)用哪個方法:
class Base(object): def test(self): print("----Base") class A(Base): def test(self): print("-----A") class B(Base): def test(self): print("-----B") class C(A,B): pass #def test(self): # print("-----C") c = C() c.test() # -----A print(C.__mro__) # (多態(tài), , , , ) 如果有同名方法,會按這個順序執(zhí)行。其中 , 這個順序與class C(A,B)這個順序有關(guān)。
多態(tài)的概念是應(yīng)用于Java和C#這一類強類型語言中,而Python崇尚“鴨子類型”。
所謂多態(tài):定義時的類型和運行時的類型不一樣,此時就成為多態(tài)。
class Dog(object): def print_self(self): print("大家好,我是dog,...") class xiaogou(Dog): def print_self(self): print("hello ,我是xiaogou") def introduce(temp): temp.print_self() dog1 = Dog() dog2 = xiaogou() introduce(dog1) introduce(dog2)類屬性、實例屬性
class Tool(object): #類屬性 num = 0 #方法 def __init__(self, new_name): #實例屬性 self.name = new_name #對類屬性+=1 Tool.num += 1 tool1 = Tool("t1") tool2 = Tool("t2") tool3 = Tool("t3") print(Tool.num)
靜態(tài)方法、類方法
class Game(object): #類屬性 num = 0 #實例方法 操作實例屬性 def __init__(self): #實例屬性 self.name = "laowang" #類方法 操作類屬性 @classmethod def add_num(cls): cls.num = 100 #靜態(tài)方法 不操作類屬性和實例屬性 @staticmethod def print_menu(): print("----------------------") game = Game() #Game.add_num()#可以通過類的名字調(diào)用類方法 game.add_num()#可以通過這個類創(chuàng)建出來的對象調(diào)用這個類方法 print(Game.num) #Game.print_menu()#通過類調(diào)用靜態(tài)方法 game.print_menu()#通過實例對象調(diào)用靜態(tài)方法單例模式
class Car(object): __instance=None def __init__(self): pass def __new__(cls): if not cls.__instance: cls.__instance=object.__new__(cls) return cls.__instance c1=Car() c2=Car() print(id(c1)) print(id(c2)) #相等
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/41480.html
摘要:以這種方式實現(xiàn)對象系統(tǒng)的目的是展示使用對象隱喻并不需要特殊的編程語言。我們的實現(xiàn)并不遵循類型系統(tǒng)的明確規(guī)定。反之,它為實現(xiàn)對象隱喻的核心功能而設(shè)計。是分發(fā)字典,它響應(yīng)消息和。 2.6 實現(xiàn)類和對象 來源:2.6 Implementing Classes and Objects 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 在使用面向?qū)ο缶幊谭妒綍r,我們使用對象隱喻來指導(dǎo)程序...
摘要:一面向?qū)ο缶幊?。是一門面向?qū)ο蟮木幊陶Z言,通過對象實現(xiàn)對方法的調(diào)用。面向過程的程序設(shè)計把計算機程序視為一系列的命令集合,即一組函數(shù)的順序執(zhí)行。對于面向?qū)ο笳Z言,重要的概念是類和實例。 一、preface 面向?qū)ο缶幊蘋OP:object oriented programming。OOP把對象作為程序的基本單元,一個對象包含了數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)。Python是一門面向?qū)ο蟮木幊陶Z言,...
摘要:但是隨后有人提出反對意見并說這個是隨后搜索到這篇文章深刻理解中的元類里面介紹了如何使用函數(shù)創(chuàng)建一個類,并解釋了屬性。 有如下代碼 #-*-coding:utf-8-*- class a(): pass a1 = a() print(type(a),type(a1)) 兩個python版本分別為Python2.7.11Python3.5.1 在python2中得到的結(jié)果(, )a...
摘要:什么是元類剛才說了,元類就是創(chuàng)建類的類。類上面的屬性,相信愿意了解元類細節(jié)的盆友,都肯定見過這個東西,而且為之好奇。使用了這個魔法方法就意味著就會用指定的元類來創(chuàng)建類了。深刻理解中的元類 (一) python中的類 今天看到一篇好文,然后結(jié)合自己的情況總結(jié)一波。這里討論的python類,都基于python2.7x以及繼承于object的新式類進行討論。 首先在python中,所有東西都...
摘要:面向?qū)ο笞钪匾母拍顟?yīng)該就是類和實例了。記得以前學(xué)習的時候,有一個比較簡單的例子來解釋類和實例。構(gòu)造函數(shù)類中可以定義一個構(gòu)造函數(shù)。構(gòu)造函數(shù)的意思就是類在創(chuàng)建的時候會執(zhí)行的函數(shù)。在實例中通過構(gòu)造函數(shù)添加的或者在類外動態(tài)添加的屬性可以。 面向?qū)ο笞钪匾母拍顟?yīng)該就是類(class)和實例(instance)了。記得以前學(xué)習java的時候,有一個比較簡單的例子來解釋類和實例。在汽車制造過程中...
閱讀 1584·2021-10-08 10:05
閱讀 3209·2021-09-26 10:10
閱讀 974·2019-08-30 15:55
閱讀 583·2019-08-26 11:51
閱讀 527·2019-08-23 18:10
閱讀 3975·2019-08-23 15:39
閱讀 740·2019-08-23 14:50
閱讀 868·2019-08-23 14:46