python类以及装饰器

文章介绍了Python中的类,包括如何创建和使用类,类的私有属性和方法。同时,详细讲解了装饰器的概念,展示了装饰器如何增强函数功能,包括普通装饰器、类装饰器和静态方法。还提到了@property装饰器用于创建属性getter和setter。
摘要由CSDN通过智能技术生成
python类以及装饰器
类的基本使用
class Mytest(object):
    name = ''
    age = ''
    # 初始化方法
    def __init__(self, name, age='222'):
        self.name = name
        self.age = age

    def say(self):
        print(self.name+'say')

    def jump(self):
        print(self.age+'jump')


a = Mytest('wsm', "26")
a.say()
a.jump()

类的私有属性以及方法
class Mytest(object):
    __name = ''
    __age = ''
    # 初始化方法
    def __init__(self, name, age='222'):
        self.__name = name
        self.__age = age

    def say(self):
        self.__jump()
        print(self.name+'say')

    def __jump(self):
        print(self.age+'jump')


a = Mytest('hellow', "26")
a.say() #hellow
a.jump()#26

属性和方法 名称前面加上 __表示类的实例对象 不能直接访问私有属性以及方法 只能在内部调用

装饰器
  • 什么是装饰器
    • 装饰器也是一种函数
    • 可以接收函数作为参数
    • 可以返回函数
    • 接收一个函数,内部进行处理 返回了一个新的函数,动态增强了函数的功能

简单使用

 def check_number(func):         		#一个函数接收一个参数
    def number_inner(*args, **kwargs):   #对此函进行二次加工
        result = func(*args, **kwargs)
        print('打印参数args', args)
        print('打印参数kwargs', kwargs)
    return number_inner				 	#将加工好的结果返回

 @check_number
 def inner(data, date2):
     return data

 print(inner(0,a=1)
类的装饰器
  • @classMethod
    • 可以不经过实例化直接调用
    • 再@classMethod装饰器内不能调用类内部的其他函数
    • 类内的其他函数可以通过self调用 @classmethod的装饰器函数
    • 可以通过cls参数 访问类中的变量
class Myclass:
    name = "wsm"

    def __init__(self, name, age) -> None:
        self.name = name
        self.age = age

    def work(self, type):
        self.say()    #这里可以正常调用
        print("工作类型{},姓名{},年龄{}".format(type, self.name, self.age))

    @classmethod
    def say(cls): 参数可以写cls    
        print("{} say:hellow".format(cls.name))
       # self.work("前端")     这样调用会报错


a = Myclass("wsm", 26)
a.work("前端")

Myclass.say()# "wsm say:hellow"  可以直接调用
  • @staticMethod
    • 可以不经过实例化直接调用
    • 不允许传递self 和cls 参数
    • 在类内无法调用其他函数
    • 也无法访问类中的类变量
    • 其他类内函数可以正常调用
class Myclass:
    name = "sss"

    def __init__(self, name, age) -> None:
        self.name = name
        self.age = age

    def work(self, type):
        # print("工作类型{},姓名{},年龄{}".format(type, self.name, self.age))
        self.say2("前端")

    @classmethod
    def say(self):
        print("{} say:hellow".format(self.name))

    @staticmethod
    def say2():
        print("say:hellow")


a = Myclass("wsm", 25)
a.work() # sss say:hellow

Myclass.say2() #say:hellow
  • @property
    • 可以不经过实例化直接调用 调用时不加() 所以不能传递参数
    • 实例化之后也可以正常调用
    • 其他类内函数可以正常调用
    • 函数内可以使用self参数
    • 可以使用装饰器去修改类中的类变量 例子如下
class Myclass2(object):
    # name = "sss"

    def __init__(self, name) -> None:
        self.__name = name

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self, value):
        self.__name = value

a = Myclass2(name="wsm")
print(a.name)#wsm
a.name = "lys"
print(a.name)#lys
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值