Python 接口类或抽象类 反射

# 抽象类或者接口类,制定规范,统一方法名

 1 # # 抽象类或者接口类,制定规范,统一方法名
 2 from abc import ABCMeta,abstractmethod
 3 class Payrole(metaclass=ABCMeta):
 4     @abstractmethod
 5     def pay(self,money):pass
 6 
 7 
 8 class QQpay(Payrole):
 9     def pay(self,money):
10         print('您已经通过QQ支付了%s元' % money)
11 
12 
13 class Wechatpay(Payrole):
14     def pay(self,money):
15         print('您已经通过微信支付了%s元' % money)
16 
17 class Alipay(Payrole):
18     def pay(self, money):
19         print('您已经通过支付宝支付了%s元' % money)
20 
21 def pay(obj,money):
22     obj.pay(money)
23 
24 
25 qq = QQpay()
26 weixin = Wechatpay()
27 ali = Alipay()
28 pay(qq,700)
29 pay(weixin,600)
30 pay(ali,400)
31 pay(ali,900)
View Code

 

# 将方法转换为属性,修改和删除私有方法

 1 # 将方法转换为属性,修改和删除私有方法
 2 
 3 class People:
 4     def __init__(self, name, age, sex):
 5         self.name = name
 6         self.__age = age
 7         self.__sex = sex
 8     @property
 9     def age(self):
10         return self.__age
11 
12     @age.setter
13     def age(self,new_age):
14         self.__age = new_age
15 
16     @age.deleter
17     def age(self):
18         return 789
19 
20 
21 a = People('anthony',19,'')
22 # a.age = 21
23 del a.age
24 print(a.age)
View Code

 

# 反射(实例化对象、类、当前模块、其他模块)

 1 # 对于实例化对象
 2 class Foo:
 3     f = '类的静态变量'
 4     def __init__(self,name,age):
 5         self.name=name
 6         self.age=age
 7 
 8     def say_hi(self):
 9         print('hi,%s'%self.name)
10 
11 obj=Foo('egon',73)
12 
13 print(hasattr(obj,'name'))  # 判断属性是否存在
14 print(getattr(obj,'name'))  # 获取属性
15 
16 setattr(obj,'oldboy','anthony')   # 修改属性
17 print(getattr(obj,'oldboy'))
18 
19 print(delattr(obj,'name'))  # 删除属性
20 print(getattr(obj,'name'))
实例化对象示例
 1 # 对于类的示例
 2 class Foo(object):
 3     staticField = "old boy"
 4 
 5     def __init__(self):
 6         self.name = 'wupeiqi'
 7 
 8     def func(self):
 9         return 'func'
10 
11     @staticmethod
12     def bar():
13         return 'bar'
14 
15 print(getattr(Foo,'staticField'))
16 print(getattr(Foo,'bar'))
类的示例
 1 # 对于当前模块的示例
 2 import sys
 3 
 4 
 5 def s1():
 6     print( 's1')
 7 
 8 
 9 def s2():
10     print( 's2')
11 
12 
13 this_module = sys.modules[__name__]
14 
15 
16 print(getattr(this_module,'s1'))
17 print(hasattr(this_module,'s2'))
当前模块的示例
 1 #一个模块中的代码
 2 def test():
 3     print('from the test')
 4 """
 5 程序目录:
 6     module_test.py
 7     index.py
 8  
 9 当前文件:
10     index.py
11 """
12 # 另一个模块中的代码
13 import module_test as obj
14 
15 #obj.test()
16 
17 print(hasattr(obj,'test'))
18 
19 getattr(obj,'test')()
其他模块的示例

 

posted @ 2018-06-24 15:58  Done、  阅读(334)  评论(0编辑  收藏  举报