溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python的約束、反射

發(fā)布時間:2020-07-29 06:51:46 來源:網絡 閱讀:174 作者:ckllf 欄目:編程語言

  1.約束:子類中必須繼承父類的方法,不然會報錯。

  class Base(object):

  def send(self):

  raise NotImplementedError('子類中必須實現(xiàn)send方法')

  class Foo(Base):

  """如果不寫send方法,會返回錯誤信息"""

  def send(self):

  print('234')

  obj = Foo()

  obj.send()

  2.反射(反射就是把字符串反射成內存對象)

  反射中四個重要的方法

  getattr 獲取指定字符串名稱的對象屬性

  setattr 為對象設置一個對象

  hasattr 判斷對象是否有對應的對象(字符串)

  delattr 刪除指定屬性

  #!/usr/bin/env python

  # -*- coding: utf-8 -*-

  # Author: rex.cheny

  # E-mail: rex.cheny@outlook.com

  class TestObj(object):

  def __init__(self, name, age):

  self.name = name

  self.age = age

  def displayName(self):

  print("displayName方法執(zhí)行,打印姓名:", self.name)

  def AAA(self):

  print("I am AAA.")

  def main():

  to = TestObj("Tom", 23)

  # 查看 to 實例里面是否有 name 這個屬性

  if hasattr(to, "name"):

  print("實例 to 中有 name 屬性。")

  print(getattr(to, "name"))

  else:

  print("實例 to 中沒有 name 屬性。")

  if hasattr(to, "displayName"):

  print("實例 to 中有 displayName 屬性。")

  getattr(to, "displayName")()

  else:

  print("實例 to 中沒有 displayName 屬性。")

  if hasattr(to, "AAA"):

  print("實例 to 中有 AAA 屬性。")

  getattr(to, "AAA")()

  else:鄭州婦科醫(yī)院 http://www.zyfuke.com/

  print("實例 to 中沒有 AAA 屬性,將會設置。")

  setattr(to, "AAA", AAA) # 參數(shù):實例、方法名稱、具體方法 相當于 to.AAA = AAA 第一個AAA是函數(shù)在實例中的名稱, 第二個AAA是把哪個函數(shù)放進去,兩者只是恰好這里名稱一樣

  # to.AAA(to) # 這里一定要主動傳遞一個實例進去,因為它不會自動裝配self

  getattr(to, "AAA")(to)

  if __name__ == '__main__':

  main()

  舉個例子

  class TestObj(object):

  def __init__(self, name):

  self.name = name

  def displayname(self):

  print(self.name)

  def main():

  to = TestObj(name="Tom")

  cmd = input("輸入:")

  if hasattr(to, cmd):

  pass

  else:

  setattr(to, cmd, displayname)

  func = getattr(to, cmd)

  func(to)

  if __name__ == '__main__':

  main()

  以字符串的形式使用模塊的方法

  #!/usr/bin/env python

  # -*- coding: utf-8 -*-

  # Author: rex.cheny

  # E-mail: rex.cheny@outlook.com

  temp = "re" # 要引入的模塊

  func = "compile" # 要使用的方法

  model = __import__(temp) # 導入模塊

  function = getattr(model, func) # 找到模塊中的屬性

  def main():

  txt = "hj123uo"

  pattern = function(r"[0-9]+") # 這里執(zhí)行funcation()就等于執(zhí)行re.compile()函數(shù)

  print(model.search(pattern, txt).group())

  if __name__ == '__main__':

  main()


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI