亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

介紹Python中幾個常用的類方法

系統 1856 0

內置方法 說明

?__init__(self,...) 初始化對象,在創建新對象時調用

?__del__(self) 釋放對象,在對象被刪除之前調用

?__new__(cls,*args,**kwd) 實例的生成操作

?__str__(self) 在使用print語句時被調用

?__getitem__(self,key) 獲取序列的索引key對應的值,等價于seq[key]

?__len__(self) 在調用內聯函數len()時被調用

?__cmp__(stc,dst) 比較兩個對象src和dst

?__getattr__(s,name) 獲取屬性的值

?__setattr__(s,name,value) 設置屬性的值

?__delattr__(s,name) 刪除name屬性

?__getattribute__() __getattribute__()功能與__getattr__()類似

?__gt__(self,other) 判斷self對象是否大于other對象

?__lt__(slef,other) 判斷self對象是否小于other對象

?__ge__(slef,other) 判斷self對象是否大于或者等于other對象

?__le__(slef,other) 判斷self對象是否小于或者等于other對象

?__eq__(slef,other) 判斷self對象是否等于other對象

?__call__(self,*args) 把實例對象作為函數調用

__init__():

__init__方法在類的一個對象被建立時,馬上運行。這個方法可以用來對你的對象做一些你希望的初始化。注意,這個名稱的開始和結尾都是雙下劃線。

代碼例子:
?

            
#!/usr/bin/python
# Filename: class_init.py
class Person:
  def __init__(self, name):
    self.name = name
  def sayHi(self):
    print 'Hello, my name is', self.name
p = Person('Swaroop')
p.sayHi()

          

輸出:

            
Hello, my name is Swaroop

          

?

?? 說明:__init__方法定義為取一個參數name(以及普通的參數self)。在這個__init__里,我們只是創建一個新的域,也稱為name。注意它們是兩個不同的變量,盡管它們有相同的名字。點號使我們能夠區分它們。最重要的是,我們沒有專門調用__init__方法,只是在創建一個類的新實例的時候,把參數包括在圓括號內跟在類名后面,從而傳遞給__init__方法。這是這種方法的重要之處。現在,我們能夠在我們的方法中使用self.name域。這在sayHi方法中得到了驗證。

__new__():

__new__()在__init__()之前被調用,用于生成實例對象.利用這個方法和類屬性的特性可以實現設計模式中的單例模式.單例模式是指創建唯一對象嗎,單例模式設計的類只能實例化一個對象.

?

            
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Singleton(object):
  __instance = None            # 定義實例
 
  def __init__(self):
    pass
 
  def __new__(cls, *args, **kwd):     # 在__init__之前調用
    if Singleton.__instance is None:  # 生成唯一實例
      Singleton.__instance = object.__new__(cls, *args, **kwd)
    return Singleton.__instance

          

?

? __getattr__()、__setattr__()和__getattribute__():

當讀取對象的某個屬性時,python會自動調用__getattr__()方法.例如,fruit.color將轉換為fruit.__getattr__(color).當使用賦值語句對屬性進行設置時,python會自動調用__setattr__()方法.__getattribute__()的功能與__getattr__()類似,用于獲取屬性的值.但是__getattribute__()能提供更好的控制,代碼更健壯.注意,python中并不存在__setattribute__()方法.

代碼例子:
?

            
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Fruit(object):
  def __init__(self, color = "red", price = 0):
    self.__color = color
    self.__price = price
     
  def __getattribute__(self, name):        # 獲取屬性的方法
    return object.__getattribute__(self, name)
 
  def __setattr__(self, name, value):
    self.__dict__[name] = value
 
if __name__ == "__main__":
  fruit = Fruit("blue", 10)
  print fruit.__dict__.get("_Fruit__color")    # 獲取color屬性
  fruit.__dict__["_Fruit__price"] = 5
  print fruit.__dict__.get("_Fruit__price")    # 獲取price屬性

          

?

__getitem__():

如果類把某個屬性定義為序列,可以使用__getitem__()輸出序列屬性中的某個元素.假設水果店中銷售多鐘水果,可以通過__getitem__()方法獲取水果店中的沒種水果

代碼例子:
?

            
#!/usr/bin/python
# -*- coding: UTF-8 -*-class FruitShop:
   def __getitem__(self, i):   # 獲取水果店的水果
     return self.fruits[i]   
if __name__ == "__main__":
  shop = FruitShop()
  shop.fruits = ["apple", "banana"]
  print shop[1]
  for item in shop:        # 輸出水果店的水果
    print item,

          

?

輸出為:

            
banana

apple banana


          

?

?__str__():

__str__()用于表示對象代表的含義,返回一個字符串.實現了__str__()方法后,可以直接使用print語句輸出對象,也可以通過函數str()觸發__str__()的執行.這樣就把對象和字符串關聯起來,便于某些程序的實現,可以用這個字符串來表示某個類

代碼例子:
?

            
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Fruit:   
  '''Fruit類'''        #為Fruit類定義了文檔字符串
  def __str__(self):     # 定義對象的字符串表示
    return self.__doc__
 
if __name__ == "__main__":
  fruit = Fruit()
  print str(fruit)      # 調用內置函數str()出發__str__()方法,輸出結果為:Fruit類
  print fruit         #直接輸出對象fruit,返回__str__()方法的值,輸出結果為:Fruit類

          

?

__call__():

在類中實現__call__()方法,可以在對象創建時直接返回__call__()的內容.使用該方法可以模擬靜態方法

代碼例子:
?

            
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Fruit:
  class Growth:    # 內部類
    def __call__(self):
      print "grow ..."
 
  grow = Growth()   # 調用Growth(),此時將類Growth作為函數返回,即為外部類Fruit定義方法grow(),grow()將執行__call__()內的代碼
if __name__ == '__main__':
  fruit = Fruit()
  fruit.grow()     # 輸出結果:grow ...
  Fruit.grow()     # 輸出結果:grow ...

          


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 毛片2016免费视频 | 一级黄色免费网站 | www.黄| 久久亚洲精品一区二区三区浴池 | 牛牛影视成人午夜影视 | 肉漫天堂 | 欧美成人免费在线 | 欧美最大成人毛片视频网站 | 成人精品国产亚洲欧洲 | 欧美日韩不卡在线 | 在线播放性xxx欧美 在线播放亚洲 | 9热这里只有真品 | 亚洲黄色a| 国产嘿咻 | 欧美一区二区三区精品国产 | 精品国产亚洲一区二区三区 | 乱子伦免费视频中文字幕 | 色猫咪av在线网址 | 国产成人精品亚洲77美色 | 亚洲国产精品成人综合久久久 | 日日夜夜免费视频 | 国内精品久久久久鸭 | 国产日韩精品视频一区二区三区 | 国产免费人人看大香伊 | 九九影院理论片在线观看 | 国产激情一区二区三区 | 亚洲欧美国产毛片在线 | 欧美另类性视频在线看 | 精品亚洲综合久久中文字幕 | 伊人久久精品一区二区三区 | 四虎网站在线观看 | 99精品视频在线观看免费播放 | 色久优优 欧美色久优优 | 亚洲视频在线a视频 | 国产香蕉一区二区在线网站 | 久草视频大全 | 精品伊人久久大香线蕉网站 | 亚洲精品一区二区三区在 | 午夜精品福利在线 | 玖玖国产 | 国产成年网站v片在线观看 国产成人 免费观看 |