温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python的约束、反射

发布时间:2020-07-29 06:51:46 来源:网络 阅读:177 作者:ckllf 栏目:编程语言

  1.约束:子类中必须继承父类的方法,不然会报错。

  class Base(object):

  def send(self):

  raise NotImplementedError('子类中必须实现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方法执行,打印姓名:", 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:郑州妇科医院 http://www.zyfuke.com/

  print("实例 to 中没有 AAA 属性,将会设置。")

  setattr(to, "AAA", AAA) # 参数:实例、方法名称、具体方法 相当于 to.AAA = AAA 第一个AAA是函数在实例中的名称, 第二个AAA是把哪个函数放进去,两者只是恰好这里名称一样

  # 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]+") # 这里执行funcation()就等于执行re.compile()函数

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

  if __name__ == '__main__':

  main()


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI