成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python類和對(duì)象

Raaabbit / 3350人閱讀

摘要:類的定義相當(dāng)于的構(gòu)造函數(shù)方法相當(dāng)于的方法創(chuàng)建了對(duì)象,會(huì)自動(dòng)的調(diào)用方法被調(diào)用被調(diào)用被調(diào)用魔法方法在中,所有的以雙下劃線包起來的方法,都被統(tǒng)稱為魔法方法。所謂多態(tài)定義時(shí)的類型和運(yùn)行時(shí)的類型不一樣,此時(shí)就成為多態(tài)。

class 類的定義
class Cat(object):
    def __init__(self,name,age): # 相當(dāng)于Java的構(gòu)造函數(shù)
        self.name=name
        self.age=age
        print("__init__方法")
    
    def __str__(self):  # 相當(dāng)于Java的toString方法
        pass
    
    def eat(self):
        print("eat......")
        
    def drink(self):
        print("drink......")

tom=Cat("jack",10) # 創(chuàng)建了tom對(duì)象,python會(huì)自動(dòng)的調(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個(gè)下劃線"__",則表明該屬性是私有屬性,否則為公有屬性(方法也是一樣,方法名前面加了2個(gè)下劃線的話表示該方法是私有的,否則為公有的)。

繼承
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()

注意如果父類擁有同名的方法,子類會(huì)調(diào)用哪個(gè)方法:

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__) # (, , , , ) 如果有同名方法,會(huì)按這個(gè)順序執(zhí)行。其中, 這個(gè)順序與class C(A,B)這個(gè)順序有關(guān)。
多態(tài)

多態(tài)的概念是應(yīng)用于Java和C#這一類強(qiáng)類型語言中,而Python崇尚“鴨子類型”。

所謂多態(tài):定義時(shí)的類型和運(yùn)行時(shí)的類型不一樣,此時(shí)就成為多態(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)
類屬性、實(shí)例屬性
class Tool(object):

    #類屬性
    num = 0

    #方法
    def __init__(self, new_name):
        #實(shí)例屬性
        self.name = new_name
        #對(duì)類屬性+=1
        Tool.num += 1


tool1 = Tool("t1")
tool2 = Tool("t2")
tool3 = Tool("t3")

print(Tool.num)

靜態(tài)方法、類方法

class Game(object):

    #類屬性
    num = 0

    #實(shí)例方法 操作實(shí)例屬性
    def __init__(self):
        #實(shí)例屬性
        self.name = "laowang"

    #類方法  操作類屬性
    @classmethod
    def add_num(cls):
        cls.num = 100

    #靜態(tài)方法  不操作類屬性和實(shí)例屬性
    @staticmethod
    def print_menu():
        print("----------------------")

game = Game()
#Game.add_num()#可以通過類的名字調(diào)用類方法
game.add_num()#可以通過這個(gè)類創(chuàng)建出來的對(duì)象調(diào)用這個(gè)類方法
print(Game.num)

#Game.print_menu()#通過類調(diào)用靜態(tài)方法
game.print_menu()#通過實(shí)例對(duì)象調(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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41480.html

相關(guān)文章

  • SICP Python 描述 2.6 實(shí)現(xiàn)類和對(duì)象

    摘要:以這種方式實(shí)現(xiàn)對(duì)象系統(tǒng)的目的是展示使用對(duì)象隱喻并不需要特殊的編程語言。我們的實(shí)現(xiàn)并不遵循類型系統(tǒng)的明確規(guī)定。反之,它為實(shí)現(xiàn)對(duì)象隱喻的核心功能而設(shè)計(jì)。是分發(fā)字典,它響應(yīng)消息和。 2.6 實(shí)現(xiàn)類和對(duì)象 來源:2.6 Implementing Classes and Objects 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 在使用面向?qū)ο缶幊谭妒綍r(shí),我們使用對(duì)象隱喻來指導(dǎo)程序...

    chenjiang3 評(píng)論0 收藏0
  • Python面向對(duì)象編程 - 類和實(shí)例

    摘要:一面向?qū)ο缶幊?。是一門面向?qū)ο蟮木幊陶Z言,通過對(duì)象實(shí)現(xiàn)對(duì)方法的調(diào)用。面向過程的程序設(shè)計(jì)把計(jì)算機(jī)程序視為一系列的命令集合,即一組函數(shù)的順序執(zhí)行。對(duì)于面向?qū)ο笳Z言,重要的概念是類和實(shí)例。 一、preface 面向?qū)ο缶幊蘋OP:object oriented programming。OOP把對(duì)象作為程序的基本單元,一個(gè)對(duì)象包含了數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)。Python是一門面向?qū)ο蟮木幊陶Z言,...

    Elle 評(píng)論0 收藏0
  • 由type()函數(shù)對(duì)類和實(shí)例使用結(jié)果差異而引出的一個(gè)問題

    摘要:但是隨后有人提出反對(duì)意見并說這個(gè)是隨后搜索到這篇文章深刻理解中的元類里面介紹了如何使用函數(shù)創(chuàng)建一個(gè)類,并解釋了屬性。 有如下代碼 #-*-coding:utf-8-*- class a(): pass a1 = a() print(type(a),type(a1)) 兩個(gè)python版本分別為Python2.7.11Python3.5.1 在python2中得到的結(jié)果(, )a...

    zhangwang 評(píng)論0 收藏0
  • python 類和元類(metaclass)的理解和簡單運(yùn)用

    摘要:什么是元類剛才說了,元類就是創(chuàng)建類的類。類上面的屬性,相信愿意了解元類細(xì)節(jié)的盆友,都肯定見過這個(gè)東西,而且為之好奇。使用了這個(gè)魔法方法就意味著就會(huì)用指定的元類來創(chuàng)建類了。深刻理解中的元類 (一) python中的類 今天看到一篇好文,然后結(jié)合自己的情況總結(jié)一波。這里討論的python類,都基于python2.7x以及繼承于object的新式類進(jìn)行討論。 首先在python中,所有東西都...

    zhangqh 評(píng)論0 收藏0
  • python學(xué)習(xí)筆記-類和實(shí)例

    摘要:面向?qū)ο笞钪匾母拍顟?yīng)該就是類和實(shí)例了。記得以前學(xué)習(xí)的時(shí)候,有一個(gè)比較簡單的例子來解釋類和實(shí)例。構(gòu)造函數(shù)類中可以定義一個(gè)構(gòu)造函數(shù)。構(gòu)造函數(shù)的意思就是類在創(chuàng)建的時(shí)候會(huì)執(zhí)行的函數(shù)。在實(shí)例中通過構(gòu)造函數(shù)添加的或者在類外動(dòng)態(tài)添加的屬性可以。 面向?qū)ο笞钪匾母拍顟?yīng)該就是類(class)和實(shí)例(instance)了。記得以前學(xué)習(xí)java的時(shí)候,有一個(gè)比較簡單的例子來解釋類和實(shí)例。在汽車制造過程中...

    Richard_Gao 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<