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