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()
View Code

 

方法二:

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()
View Code

 

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()
View Code

 

posted @ 2022-03-31 00:38  帅童学  阅读(44)  评论(0编辑  收藏  举报