zoukankan      html  css  js  c++  java
  • 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')()
    其他模块的示例
  • 相关阅读:
    k8s前期部署准备
    树莓派安装Gitlab-runner
    GitLab CI/CD 报错
    测试
    LVS结合keepalive
    LVS实现负载均衡安装配置详解
    LVS实现负载均衡原理
    私有仓库 gitlab 部署笔记
    Docker 案例: 在容器中部署静态网站
    docker 容器的启动方式
  • 原文地址:https://www.cnblogs.com/ipyanthony/p/9220759.html
Copyright © 2011-2022 走看看