day8_类的装饰器和反射
""" 类的装饰器: @property 当类的函数属性声明 @property后, 函数属性不需要加括号 即可调用 @staticmethod 当类的函数属性声明 @staticmethod后, 把函数属性声明为静态属性, 不能直接访问类属性与实例属性 @classmethod 当函数属性声明 @classmethod后,把函数属性声明为类属性,不能直接访问实例属性,类可以直接调用 """ class A(): q = "清华大学" def __init__(self): self.name = "不忘初心,方缘继续努力ing" self.oh = 666 @property def add(self): print(self.name) return 1+1 @staticmethod def result(para): # para()是一个对象 print(para().add) # 函数属性声明为静态属性时,不能直接访问类属性和实例属性 print(para.add) return 3*3 @classmethod def clas(cls): # print(cls.oh) # 函数属性声明为类属性时,不能直接访问实例对象,但可以访问类属性 print(cls.q) # q为类A的静态属性 # 调试程序 if __name__ == "__main__": # 创建类A的对象(实例)data data = A() # 参数A是一个类 A.result(A) # 函数属性不用加括号 print(data.add) data.clas() # 打印对象的属性字典 对象 = A() print(对象.__dict__)
""" 反射: hasattr(obj, str) 返回布尔值, 当str存在于 obj时,返回true, 否则返回false getattr(obj, str) 返回str的内存地址 """ class He(): # pass def interface(self,user,passwd): if user == "belief" and passwd == "123": return 1 # 等效于return True else: error = "账号或密码错误!!!" return error class I(): def login(self): if hasattr(He,"interface"): user = input("用户名>>>:") passwd = input("密码>>>:") func = getattr(He,"interface") data = func(self,user,passwd) if data == 1: # 等效于if data == True print("这是一个完美的登陆界面!!!") else: print(data) else: print("他去旅游了,还没回来敲代码!!!") def index(self): print("登陆成功后执行我") if __name__ == "__main__": i = I() i.login()
一行代码一行诗