欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python装饰器的使用

程序员文章站 2024-01-25 16:13:22
装饰器 python装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能。...

装饰器

python装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能。

不带参数的装饰器

def deco(func):
    def a():
        print("------------stard-------------")
        func()
        print("--------------end-------------")
    return a

@deco
def myfunc():
    print("hello world")

myfunc()
#输出
------------stard-------------
hello world
--------------end-------------

这里的deco函数就是最原始的装饰器,它的参数是一个函数,然后返回值也是一个函数。其中作为参数的这个函数func()就在返回函数a()的内部执行。然后在函数myfunc()前面加上@deco,现在只要调用myfunc(),它就已经变身为“新的功能更多”的函数了。

带参数的装饰器

def deco(arg):
    def _deco(func):
        def __deco():
            print("before %s called [%s]." % (func.__name__, arg))
            func()
            print("  after %s called [%s]." % (func.__name__, arg))
        return __deco
    return _deco

@deco("mymodule")
def myfunc():
    print(" myfunc() called.")

@deco("module2")
def myfunc2():
    print(" myfunc2() called.")

myfunc()
myfunc2()

#输出
before myfunc called [mymodule].
 myfunc() called.
  after myfunc called [mymodule].
before myfunc2 called [module2].
 myfunc2() called.
  after myfunc2 called [module2].
带参数的装饰器和不带参数的装饰器差不多,多了一层目录结构。

类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

在类内部定义的属性属于类本身的,由操作系统只分配一块内存空间,大家公用这一块内存空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性:而类中有两种属性:数据属性和函数属性,其中类的数据属性是共享给所有对象的,而类的函数属性是绑定到所有对象的。 创建类

使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾:

class ClassName:
   '类的帮助信息'   #类文档字符串
   class_suite  #类体

类的帮助信息可以通过ClassName.__doc__查看。
class_suite 由类成员,方法,数据属性组成。

创建一个类

class Student():
    count = 0
    def __init__(self,name,age):
        self.name = name
        self.age = age
        Student.count +=1



student1 = Student("shanwu",25)
print(student1.__dict__)
student2 = Student("wushan",28)
print(student2.__dict__)
print(Student.count)

# 输出
{'name': 'shanwu', 'age': 25}
{'name': 'wushan', 'age': 28}
2

初始化构造函数__init_的作用

所谓初始化构造函数就是在构造对象的同时被对象自动调用,完成对事物的初始化,一个类只要生成一个类对象,它一定会调用初始化构造函数.

特点:

1、一个类中只能有一个初始化构造函数

2、不能有返回值

3、可以用它来为每个实例定制自己的特征 self关键字的用法

为了辨别此时此刻正在处理哪个对象,self指针变量指向当前时刻正在处理的对象,即构造出来的对象

在构造方法中self代表的是:self指针变量指向当前时刻正在创建的对象

构造函数中self.name = name 的含义:将局部变量name的数值发送给当前时刻正在创建的对象中的name成员

通常包总是一个目录,可以使用import导入包,或者from + import来导入包中的部分模块。包目录下为首的一个文件便是 init.py。然后是一些模块文件和子目录,假如子目录中也有 init.py 那么它就是这个包的子包了。

在创建许许多多模块后,我们可能希望将某些功能相近的文件组织在同一文件夹下,这里就需要运用包的概念了。包对应于文件夹,使用包的方式跟模块也类似,唯一需要注意的是,当文件夹当作包使用时,文件夹需要包含init.py文件,主要是为了避免将文件夹名当作普通的字符串。init.py的内容可以为空,一般用来进行包的某些初始化工作或者设置all值,all是在from package-name import *这语句使用的,全部导出定义过的模块。

python包:

包是一个有层次的文件目录结构,它定义了由n个模块或n个子包组成的python应用程序执行环境。

通俗一点:包是一个包含init.py 文件的目录,该目录下一定得有这个init.py文件和其它模块或子包。