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

資訊專欄INFORMATION COLUMN

Python方法(一) - 類的內(nèi)部方法

Loong_T / 1969人閱讀

摘要:輸出來(lái)是一個(gè)對(duì)象這樣便是最普通的用法了。但其實(shí)不是實(shí)例化一個(gè)類的時(shí)候第一個(gè)被調(diào)用的方法。對(duì)象通過(guò)提供方法可以模擬函數(shù)的行為,如果一個(gè)對(duì)象提供了該方法,就可以像函數(shù)一樣使用它,也就是說(shuō)等同于調(diào)用。

類(Class)和實(shí)例(Instance)
類是抽象的模板
實(shí)例是根據(jù)類創(chuàng)建出來(lái)的一個(gè)個(gè)具體的“對(duì)象”
每個(gè)對(duì)象都擁有相同的方法,但各自的數(shù)據(jù)可能不同
方法就是與實(shí)例綁定的函數(shù),和普通函數(shù)不同,方法可以直接訪問(wèn)實(shí)例的數(shù)據(jù);
super
class OldDog():  
   def __init__(self):  
       print("I am an old dog !")
       self.hungry = True  

   def eat(self):  
       if self.hungry:  
           print("I eat it !")
           self.hungry = False  
       else:  
           print("No thanks!")

class NewDog(OldDog):  
   def __init__(self):  
       super().__init__()  
       print("I am a new dog!")

olddog = OldDog()
olddog.eat()
olddog.eat()
newdog = NewDog()
newdog.eat()
newdog.eat()

當(dāng)子類繼承父類的時(shí)候,我們繼承了父類的方法。子類中含有__init__時(shí),不會(huì)自動(dòng)調(diào)用父類__init__,如需使用父類__init__中的變量,則需要在子類__init__中顯式調(diào)用    

repr

作用

返回實(shí)例化對(duì)象的表達(dá)

code

class MyClass() :
    def __str__(self) :
        return "我是MyClass的一個(gè)實(shí)例"
    def __repr__(self) :
        return "這回連print都省了"
 
a=MyClass()

result

>>> print(a)
我是MyClass的一個(gè)實(shí)例
>>> a
這回連print都省了

鏈接

一個(gè)flask json返回值的問(wèn)題
https://www.v2ex.com/t/195379
new__、__init__、__call
__new__: 對(duì)象的創(chuàng)建,是一個(gè)靜態(tài)方法,第一個(gè)參數(shù)是cls。(想想也是,不可能是self,對(duì)象還沒(méi)創(chuàng)建,哪來(lái)的self)
__init__ : 對(duì)象的初始化, 是一個(gè)實(shí)例方法,第一個(gè)參數(shù)是self。
__call__ : 對(duì)象可call,注意不是類,是對(duì)象
先有創(chuàng)建,才有初始化。即先__new__,而后__init__。

new

class Bar(object): 
  pass
  
class Foo(object): 
  def __new__(cls, *args, **kwargs): 
    return Bar() 
  
print Foo()
輸出來(lái)是一個(gè)Bar對(duì)象

init

class Person(object):
  """Silly Person"""
 
  def __init__(self, name, age):
    self.name = name
    self.age = age
 
  def __str__(self):
    return "" % (self.name, self.age)
 
if __name__ == "__main__":
  piglei = Person("piglei", 24)
  print piglei
這樣便是__init__最普通的用法了。但__init__其實(shí)不是實(shí)例化一個(gè)類的時(shí)候第一個(gè)被調(diào)用 的方法。
當(dāng)使用 Persion(name, age) 這樣的表達(dá)式來(lái)實(shí)例化一個(gè)類時(shí),最先被調(diào)用的方法 其實(shí)是 __new__ 方法。

call

對(duì)象通過(guò)提供__call__(slef, [,*args [,**kwargs]])方法可以模擬函數(shù)的行為,如果一個(gè)對(duì)象x提供了該方法,就可以像函數(shù)一樣使用它,也就是說(shuō)x(arg1, arg2...) 等同于調(diào)用x.__call__(self, arg1, arg2) 。模擬函數(shù)的對(duì)象可以用于創(chuàng)建防函數(shù)(functor) 或代理(proxy).
class Foo(object): 
  def __call__(self): 
    pass
  
f = Foo()#類Foo可call 
f()#對(duì)象f可call

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

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

相關(guān)文章

  • python基礎(chǔ)教程:類

    摘要:類對(duì)象被創(chuàng)建時(shí)存在于類命名空間內(nèi)的所有名稱都是有效的屬性名稱。類的實(shí)例化,是使用函數(shù)表示法,可以把類對(duì)象看做是會(huì)返回一個(gè)新的類實(shí)例的函數(shù)。這就是可變對(duì)象作為類變量時(shí)的特性。類變量是所有類的實(shí)例共享的屬性和方法,實(shí)例變量是每個(gè)實(shí)例獨(dú)有的數(shù)據(jù)。 Python是面向?qū)ο蟮母呒?jí)編程語(yǔ)言,在Python里面一切都是對(duì)象:數(shù)字、字符串、元組、列表、字典、集合等內(nèi)置數(shù)據(jù)類型,以及函數(shù)、方法、類、模塊...

    fish 評(píng)論0 收藏0
  • 【數(shù)據(jù)科學(xué)系統(tǒng)學(xué)習(xí)】Python # 編程基礎(chǔ)[三]

    摘要:新的稱為子類,而被繼承的稱為基類父類或超類。繼承最大的好處是子類獲得了父類的全部功能。在繼承關(guān)系中,如果一個(gè)實(shí)例的數(shù)據(jù)類型是某個(gè)子類,那它的數(shù)據(jù)類型也可以被看做是父類。 在上一篇中我們介紹了模塊和數(shù)據(jù)結(jié)構(gòu),這一篇將介紹面向?qū)ο缶幊獭? 面向?qū)ο缶幊?面向?qū)ο缶幊獭狾bject Oriented Programming,簡(jiǎn)稱 OOP,是一種程序設(shè)計(jì)思想。OOP 把對(duì)象作為程序的基本單元...

    molyzzx 評(píng)論0 收藏0
  • Python方法(二) - 類與繼承

    摘要:在類內(nèi)部的方法中使用時(shí)。類的私有方法兩個(gè)下劃線開(kāi)頭,聲明該方法為私有方法,不能在類地外部調(diào)用。先在本類中查找調(diào)用的方法,找不到才去基類中找。如果在繼承元組中列了一個(gè)以上的類,那么它就被稱作多重繼承。 類定義 類對(duì)象:創(chuàng)建一個(gè)類之后,可以通過(guò)類名訪問(wèn)、改變其屬性、方法 實(shí)例對(duì)象:類實(shí)例化后,可以使用其屬性,可以動(dòng)態(tài)的為實(shí)例對(duì)象添加屬性(類似javascript)而不影響類對(duì)象。 類...

    DevWiki 評(píng)論0 收藏0
  • Python基礎(chǔ)之接口——從協(xié)議到抽象基類

    摘要:本文重點(diǎn)協(xié)議是中非正式的接口了解抽象基類的基本概念以及標(biāo)準(zhǔn)庫(kù)中的抽象基類掌握抽象基類的使用方法。三抽象基類的使用通過(guò)繼承聲明抽象基類聲明抽象基類最簡(jiǎn)單的方式是繼承或其他抽象基類注意在之間,繼承抽象基類的語(yǔ)法是。 導(dǎo)語(yǔ):本文章記錄了本人在學(xué)習(xí)Python基礎(chǔ)之面向?qū)ο笃闹攸c(diǎn)知識(shí)及個(gè)人心得,打算入門(mén)Python的朋友們可以來(lái)一起學(xué)習(xí)并交流。 本文重點(diǎn): 1、協(xié)議是Python中非正式的接...

    TwIStOy 評(píng)論0 收藏0
  • [譯] Python 學(xué)習(xí) —— __init__() 方法 4

    摘要:同時(shí),有多個(gè)類級(jí)別的靜態(tài)構(gòu)造函數(shù)的方法。這個(gè)累贅,無(wú)論如何,是被傳遞到每個(gè)單獨(dú)的對(duì)象構(gòu)造函數(shù)表達(dá)式中。我們可能只有幾個(gè)特定的擔(dān)憂,提供額外關(guān)鍵字參數(shù)給構(gòu)造函數(shù)。 注:原書(shū)作者 Steven F. Lott,原書(shū)名為 Mastering Object-oriented Python 沒(méi)有__init__()的無(wú)狀態(tài)對(duì)象 下面這個(gè)示例,是一個(gè)簡(jiǎn)化去掉了__init__()的類。這是一個(gè)常見(jiàn)...

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

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

0條評(píng)論

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