python的约束、反射
1.约束:子类中必须继承父类的方法,不然会报错。
创新互联-专业网站定制、快速模板网站建设、高性价比龙安网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式龙安网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖龙安地区。费用合理售后完善,十余年实体公司更值得信赖。
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()
本文标题:python的约束、反射
分享URL:http://azwzsj.com/article/iecocp.html