python类以及装饰器

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

猜你喜欢

转载自blog.csdn.net/qq_51075057/article/details/130649031
今日推荐