python基础知识之面向对象进阶 反射

反射:通过字符串获取变量    有四种方法  hasattr  getattr  (setattr  delattr)不是那么重要

反射之hasattr  方法判断该类是否存在对应字符串变量

反射之getattr与hasattr  夫妻档   用hasatrr判断是否存在  在用getattr反射获取值

#
class A:
    age=12
    def func(self):
        print("in func")

    @classmethod  #类方法
    def func1(cls):
        print("in func1")

    @staticmethod  #类方法:静态方法
    def func2():
        print("in func2")

#反射对象属性
a=A()
a.name="alex" #给对象添加属性   也可以在类里面自定义属性  一个道理

if hasattr(a,"name"):# 判断是否存在那么这个属性
   print(getattr(a,"name"))
# 反射对象方法
if hasattr(a,"func"):
   getattr(a,"func")()

#  反射类属性
if hasattr(A ,"age"):
    print(getattr(A, "age"))

# 反射类方法  类方法:加有classmethod staticmethod装饰器的方法
if hasattr(A,"func1")and hasattr(A,"func2"):
    getattr(A,"func1")()
#     getattr(A, "func2")()

# 反射模块
import MyModle  #自定义模块
print(getattr(MyModle,"year")) #反射模块属性
getattr(MyModle,"myfunc")() #反射模块方法

# 反射自己类中的方法  属性
age=12
def myage():
    print(" int myage")
import sys
print(getattr(sys.modules[__name__],"age"))
getattr(sys.modules[__name__],"myage")

# 反射内置模块
import time
print(getattr(time,"time")())
print(getattr(time,"asctime")())
print(getattr(time,"strftime")("%Y-%m-%d %H-%M-%S"))#内置有参数一样传参

#反射模块中 类的属性  方法
import MyModle
print(getattr(getattr(MyModle,"C")(),"modeke"))
getattr(getattr(MyModle,"C")(),"myC")()
View Code
posted @ 2021-11-17 07:13  油炸童年  阅读(16)  评论(0编辑  收藏  举报