python面向对象之类中相关方法
类中相关方法
(1)普通无参方法
(2)绑定方法: (1)绑定到对象 (2)绑定到类
(3)静态方法:无论是对象还是类调用静态方法,都不会默认传递任何参数
class Dog():
# 普通无参方法
def tail():
print("小狗喜欢摇尾巴")
# 绑定到对象的方法
def wang(self):
print("小狗看到陌生人就叫")
# 绑定到类的方法
@classmethod
def tian(cls):
print(cls)
print("小狗喜欢舔骨头")
# 静态方法
@staticmethod
def jump(something):
print("小狗喜欢接{}".format(something))
obj = Dog()
# 无参方法的调用
# obj.tail() #error
Dog.tail() #success
# 绑定到对象方法调用
obj.wang()
Dog.wang(obj)
# 绑定到类方法调用
"""无论对象还是类都可以调用,默认传递的是类"""
Dog.tian()
obj.tian()
print(obj.__class__)
obj.jump("飞盘")
Dog.jump("飞盘")
1.编写装饰器,为多个函数加上认证的功能(用户的账号密码)要求只要登录成功一次,后续的函数都无需输入用户名和密码
方法一:
flag = False def login(func): def inner(*args,**kwargs): global flag # 如果falg=True 代表已登录 if flag: res = func(*args,**kwargs) return res else: username = input("请输入您的用户名:") password = input("请输入您的密码:") if username == "shuai" and password == "111": falg = True res = func(*args, **kwargs) return res else: print("账号或密码输入错误") return inner @login def buy_bao(): print("我要买包") @login def buy_fruit(): print("我要买水果") buy_bao() buy_fruit()
方法二:
class Shopping(): def __init__(self): self.flog = False def login(func): def inner(self,*args,**kwargs): if self.flog: res = func(self,*args,**kwargs) return res else: username = input("请输入您的用户名:") password = input("请输入您的密 码:") if username == "shuai" and password == "111": self.flag = True res = func(self,*args,**kwargs) return res else: print("账号或密码错误") return inner @login def buy_bao(self): print("我要买包") @login def buy_fruit(self): print("我要买水果") obj = Shopping() obj.buy_bao() obj.buy_fruit()
2.编写装饰器,为多个函数加上记录调用功能,要求每次调用函数都将被调用的函数名称写入文件
def log(func): def inner(self,*args,**kwargs): with open("log",mode="a",encoding="utf-8") as fp : fp.write(func.__name__ + "\n") res = func(*args,**kwargs) return res return inner @log def buy_bao(): print("我要买包") @log def buy_fruit(): print("我要买水果") buy_bao() class Record(): def log(func): def inner(*args, **kwargs): with open("log", mode="a", encoding="utf-8") as fp: fp.write(func.__name__ + "\n") res = func(self,*args, **kwargs) return res return inner @log def buy_bao(self): print("我要买包") @log def buy_fruit(self): print("我要买水果") obj = Record()