python的约束、反射
admin
2023-06-29 13:43:39
0

  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()


相关内容

热门资讯

初一男生校门口遭群殴或失聪,教... 哥哥同学辱骂母亲,辽宁鞍山13岁少年在学校门口维护哥哥与人发生争执,随后数名同龄少年一拥而上对其实施...
演唱会大量邀请票被当众焚毁,警... 极目新闻记者 杜光然5月29日,网友发帖称,有人当众焚烧大量演唱会邀请票,视频定位于温岭市体育中心。...
多所高校撤销外语学院 人工智能的发展及其他因素的影响下,外语类专业面临挑战,近年来一些高校对外语学院进行调整、重组。近日,...
解放军少将质问日方:有没有资格... 【环球时报-环球网报道 记者 郭媛丹 苏雅瑄】 “殷鉴不远,今天的世界又处在新的十字路口,我们必须警...
《给阿嬷的情书》导演被网友二创... 《给阿嬷的情书》这段解读直接破防!网友二创还原木生守桥的画面,把邮差落水,弄丢写有真相的讣告信件,解...
伊朗最高领袖顾问批特朗普背弃外... 据凤凰卫视报道,美伊谈判前景不明,伊朗最高领袖顾问雷扎伊5月30日指责美国总统特朗普第三次背弃外交原...
免去南开大学陈某院长、中山大学... 刚刚,南开大学和中山大学发布情况通报。南开大学:免去陈某院长职务南开大学通报中指出,论文第一作者郑某...
绿色算力全栈AI平台在呼和浩特...   新华社呼和浩特5月30日电(记者侯维轶)30日,绿色算力全栈AI平台——内蒙古词元交易平台在内蒙...
北京太空智算研究院在北京亦庄成... 红星资本局5月30日消息,近日,北京太空智算研究院在北京经济技术开发区(简称“北京经开区”,又称“北...
第二届西部医学科技创新学术大会... 封面新闻记者 邱添 2026年5月30日,在第十个全国科技工作者日来临之际,一场汇聚医学前沿智慧与创...