欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python面向對象 反射原理解析

系統(tǒng) 1610 0

一、靜態(tài)方法(staticmethod)和類方法(classmethod)

類方法:有個默認參數(shù)cls,并且可以直接用類名去調用,可以與類屬×××互(也就是可以使用類屬性)

靜態(tài)方法:讓類里的方法直接被類調用,就像正常調用函數(shù)一樣

類方法和靜態(tài)方法的相同點:都可以直接被類調用,不需要實例化

類方法和靜態(tài)方法的不同點:

  • 類方法必須有一個cls參數(shù)表示這個類,可以使用類屬性
  • 靜態(tài)方法不需要參數(shù)

綁定方法:分為普通方法和類方法

  • 普通方法:默認有一個self對象傳進來,并且只能被對象調用-------綁定到對象
  • 類方法:默認有一個cls對象傳進來,并且可以被類和對象(不推薦)調用-----綁定到類
  • 非綁定方法:靜態(tài)方法:沒有設置默認參數(shù),并且可以被類和對象(不推薦)調用-----非綁定
            
import time
class Date:
  def __init__(self,year,month,day):
    self.year=year
    self.month=month
    self.day=day
  # @staticmethod
  # def now():
  #   t=time.localtime()
  #   return Date(t.tm_year,t.tm_mon,t.tm_mday)
  @classmethod     #改成類方法
  def now(cls):
    t=time.localtime()
    return cls(t.tm_year,t.tm_mon,t.tm_mday) #哪個類來調用,即用哪個類cls來實例化
class EuroDate(Date):
  def __str__(self):
    return 'year:%s month:%s day:%s' %(self.year,self.month,self.day)
e=EuroDate.now()
print(e)        #我們想觸發(fā)EuroDate.__str__,此時e就是由EuroDate產(chǎn)生的,結果如我們所愿
'''
輸出結果:
year:2017 month:3 day:3
'''
          

二、反射

反射:可以用字符串的方式去訪問對象的屬性,調用對象的方法(但是不能去訪問方法),python中一切皆對象,都可以使用反射。

反射有四種方法:

hasattr: hasattr(object,name)判斷一個對象是否有name屬性或者name方法。有就返回True,沒有就返回False

getattr: 獲取對象的屬性或者方法,如果存在則打印出來。hasattr和getattr配套使用

需要注意的是,如果返回的是對象的方法,返回出來的是對象的內(nèi)存地址,如果需要運行這個方法,可以在后面添加一對()

setattr: 給對象的屬性賦值,若屬性不存在,先創(chuàng)建后賦值

delattr: 刪除該對象指定的一個屬性

1、對象應用反射

            
class Foo:
  def __init__(self):
    self.name = 'egon'
    self.age = 51
  def func(self):
    print('hello')
egg = Foo()
print(hasattr(egg,'name'))   #先判斷name在egg里面存在不存在,結果是True
print(getattr(egg,'name'))   #如果為True它才去得到,結果是egon
print(hasattr(egg,'func'))   #結果是True
print(getattr(egg,'func'))   #得到的是地址
            
              <__main__.Foo object at 0x0000000001DDA2E8>>
getattr(egg,'func')()    #在這里加括號才能得到,因為func是方法,結果是hello

一般用法如下,先判斷是否hasattr,然后取getattr
if hasattr(egg,'func'):
  getattr(egg,'func')()  #結果是hello
else:
  print('沒找到')
            
          

2、類應用反射

            
class Foo:
  f = 123
  @classmethod
  def class_method_dome(cls):
    print('class_method_dome')
  @staticmethod
  def static_method_dome():
    print('static_method_dome')    
print(hasattr(Foo,'class_method_dome'))     #結果是True
method = getattr(Foo,'class_method_dome')
method()                #結果是class_method_dome

print(hasattr(Foo,'static_method_dome'))     #結果是True
method1 = getattr(Foo,'static_method_dome')
method1()               #結果是static_method_dome
          

3、模塊應用反射

# 1.導入其他模塊引用

            
import mymodule
print(hasattr(mymodule,'test'))
getattr(mymodule,'test')()
p = getattr(mymodule,'test')
p()               #相當于上面getattr(mymodule,'test')()
          

# 2.在本模塊中應用反射

            
def demo1():
  print('hello')
import sys
module_obj = sys.modules[__name__]    #相當于'__main__'
print(module_obj)         #結果是
            
              
print(hasattr(module_obj,'demo1'))    #結果是True
getattr(module_obj,'demo1')()     #結果是hello
            
          

導入自己的模塊的例子:

            
def 注冊():
  print('regiester')
def 登錄():
  print('login')
def 購物():
  pass
print('注冊,登錄,購物')
ret = input('請輸入你要做的操作:')
import sys
my_module = sys.modules[__name__] #利用sys模塊導入一個自己的模塊
if hasattr(my_module,ret):
  getattr(my_module,ret)()
          

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 天天天天操| 久久久av | 日韩在线你懂的 | 色综合天天综合高清网国产 | 久久99视频精品 | 91撸吧| 久青草久青草高清在线播放 | 亚洲www啪成人一区二区麻豆 | 成人综合网站 | 韩国女主播青草在线观看 | 日韩欧美一区二区三区 | 欧美日韩视频 | 热99re久久精品2久久久 | 成人免费视频一区 | 久久三区| 成人18网站 | 成人黄色免费网站 | 99re视频| 亚洲国产日韩欧美在线 | 欧美freexx| 欧美日韩91| 久久天天躁夜夜躁狠狠 | 99色综合 | 12306播播影院午夜 | 精品无人区乱码一区二区三区手机 | 欧美激情综合色综合啪啪五月 | 三级黄色一级视频 | 日韩欧美二区在线观看 | 久久精品视频网站 | 春色www在线视频观看 | 国产精品成人av | 在线不欧美 | 久久三区 | 精品综合| 亚洲精品无码不卡在线播放he | 亚洲一区二区三区精品视频 | 日本高清免费h色视频在线观看 | 日本无码欧美激情在线视频 | 性69式视频在线观看免费 | 天堂在线www网亚洲 欧美 日韩 | 777xacom|