python的约束、反射

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:
        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()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值