精华内容
下载资源
问答
  • 一、模块一个模块就是一个Python文件,后缀名是.py就可以,模块就是Python文件为什么用模块程序太大,编写维护不方便,需要拆分模块可以增加代码重复利用的机会当做命名空间使用,避免命名冲突如何定义模块模块就是...

    v2-920b98ee9b2c4e1d051daf54821d32a0_1440w.jpg?source=172ae18b

    一、模块

    • 一个模块就是一个Python文件,后缀名是.py就可以,模块就是Python文件
    • 为什么用模块
      • 程序太大,编写维护不方便,需要拆分
      • 模块可以增加代码重复利用的机会
      • 当做命名空间使用,避免命名冲突
    • 如何定义模块
      • 模块就是一个普通文件
      • 最好在模块中编写如下内容
        • 函数(单一功能)
        • 类(相似功能的组合,或者类似业务模块)
        • 测试代码
    • 如何使用模块
      • 直接导入模块
        • 假如模块名称直接以数字开头(借助importlib包)
          • test = importlib.import_module("01")
      • 语法 import module_name module_name.function_name module_name.class_name
      • import moudule as 别名
        • 导入的同时给模块起一个别名
        • 其余用法和第一种相同
      • from module_name import func_name, class_name
        • 按上述方法有选择性的导入
        • 使用的时候可以直接使用导入的内容,不需要前缀
      • from module_name import *
        • 导入模块所有内容
    • 此判断语句建议一直作为程序入口 if name == "main"
      • 可以有效避免模块代码被导入的时候被动执行的问题
    • 模块的搜索路径和存储
      • 加载模块的时候,系统会在哪些地方寻找导入的模块?
      • 系统默认的模块搜索路径
        • import sys
        • sys.path # 属性可以获取路径列表
      • 添加搜索路径
        • sys.path.append(dir)
        • 使用PYTHONPATH环境变量来添加
          • bash % env PYTHONPATH=/some/dir:/other/dir python3
        • 第二种方法是在位于/usr/local/lib/python3.3/site-packages下创建一个.pth文件,将目录列举出来
      • 模块的加载顺序
        • 先搜索内存中已经加载好的模块
        • 搜索Python的内置模块
        • 搜索sys.path的路径

    二、包

    • 包是一种组织管理代码的方式,包里面存放的是模块
    • 用于将模块包含在一起的文件夹就是包,但是得确保每个文件夹都定义了一个init.py文件
    • 如果你没有定义init.py时,实际上创建了一个所谓的“命名空间包”
    • 自定义包的结构 /home/chengyiming/project_name +http://--MANIFEST.in +--README.rst +--packagename/ | +--init.py # 包的标志文件 | +--module.py | +--templates/ | +--index.html +--setup.py
    • 包的导入
      • import package_name
        • 直接导入一个包,可以使用init.py中的内容
        • 使用方式是: package_name.func_name() package_name.class_name.func_name()
        • 此种方式的访问内容是
      • import package_name as 别名
        • 用法和上述一样
        • 注意的是此种方法是默认对init.py内容的导入
      • import package.module
        • 导入包中某一个具体的模块
        • 使用方法 package.module.func_name package.module.class.fun() package.module.class.var
      • import package.module as pm
      • from ... import 导入
        • from package import module1, module2, ...
          • 此种方法不执行init的内容
        • from package import *
        • 导入当前包 init.py文件中所有的函数和类
      • from package.module import *
        • 导入包中指定的模块的所有内容
      • 在开发环境中经常会使用其他模块,可以在当前包中直接导入其他模块中的内容
        • import 完整的包或者模块的路径
      • all的用法
        • 在使用from package import * 的时候,* 可以导入的内容
        • init.py 中如果文件为空,或者没有 all 那么只可以把init中的内容导入
        • init 如果设置了 all的值,那么按照all 指定的子包或者模块进行导入,如此则不会导入 init中的内容
        • all = ['module1', 'module2', ....]

    命名空间

    • 用于区分不同位置不同功能但相同名称的函数或者变量的一个特定前缀
    • 作用是防止命名冲突
    def 
    展开全文
  • Python 基础Django 基础整体结构Model 层View 层Form 层Template 层Django 进阶部署相关Mysql相关常用算法Python 基础 基础t:语法是否熟悉?介绍一下 。 有哪些关键字?解释其作用 。 有哪些内置方法?解释其作用 。...
    42f2ccd42980b20a58f7b87a1d3de84a.png

    Python 基础

    Django 基础

    整体结构

    Model 层

    View 层

    Form 层

    Template 层

    Django 进阶

    部署相关

    Mysql相关

    常用算法


    Python 基础

    1. 基础t:语法是否熟悉?介绍一下 。
    2. 有哪些关键字?解释其作用 。
    3. 有哪些内置方法?解释其作用 。
    4. 解释一下什么是动态语言 7 动态强类型是指什么 ?
    5. 是否有编码规范的概念?采用的是哪种编码规范?
    6. 解释一下深拷贝利浅拷贝 。
    7. l ambd a 的用法以及使用场景 。
    8. 解释一下闭包及其作用 。
    9. 实现一个简单的装饰器,用来对某个函数的结果进行缓存 。
    10. Pyth o n 中几种容器类型的差别及使用场景有|哪些?
    11. 列表推导式的使用和场景有|哪些?
    12. 介绍一下 y i e ld 的用法 。
    13. 常用的内置库有|哪些?举例说明它们 的用法 。
    14. 介绍一下你了解的 magic method (魔法方法)及其作用 。
    15. 解释一下面向对象的概念及其在编程中的作用 。
    16. 如何实现单例模式?
    17. 如何对 Python 对象进行序列化?
    18. 是否能够熟练编写多线程的1:1多进程程序?
    19. 使用 socket 编写一个简单的 HTTP 服务器,成功返回 success 即可 。
    20. 如何理解 Python 中的 GIL? 这对我们的 日常开发有什么影响 ?
    21. 解释一下协程、线程和进程之间 的差别 。

    Django 基础


    整体结构

    1. 如何理解设计模式中的 MVC 模式,你平时怎么使用这种模式?
    2. 如何理解 Djan go 中的 MTV 模型 ?
    3. 介绍一下 Dj ango 中你熟悉的模块及其作用 ?
    4. 如何看待 Dj ango 自 带的 admin ,并说说你的使用经验 。
    5. 如何理解 WSGI 的作用 ?
    6. 如何自己实现 WSGI 协议?
    7. 为什么正式部署时不要开启 DEBUG = True 配置?

    Model 层

    1. 如何理解 Dj ango migrations 的作用 ?
    2. 是否有过于动编辑 m igrat ions 文在|的经历? 原因是什么 ? 有|那些需要注意的 ?
    3. 介绍一下 ORM 的概念 。
    4. 如何理解 ORM 在 Dj ango 框架中的作用?
    5. 介绍一下 ORM 下的 N+ l 问题 、发生 的原因 以及解决方案 。
    6. 介绍一下 Django 中 Mo d e l 的作用 。
    7. Model 的 Meta 属性类有|哪些可配置项 ? 其作用是什么 ? 日常怎么使用它?
    8. 介绍一下 Query Set 的作用以及你常用的 Query S e t 优化措施 。
    9. 介绍一下 Pag inati on 的用法 。
    10. 介绍一下 Mode l 中 F i e ld 的作用 。
    11. 如何定制 Man ager? 什么场景下需要定制 ?
    12. 原生 SQL 的效率跟 ORM 的效率是否进行过对 比?结果如何 ? 如何理解这种差异?
    13. Dj an go 内 置提供的权限逻辑以及其粒度 。

    View 层

    1. Dj ango 中 function v i ew 和 cl ass - based v iew 的差别及适用场景 。
    2. 如何给 clas s-bas ed v i ew 添加 l og in required 装饰器 ?
    3. midd l eware 在 Django 系统中的作用 。
    4. s ettings 中默认配置的 MIDDLEWARE S 有哪些?它们 的作用分别是什么?是否可以移除?
    5. Dj ango 系统如何判断用户 是否为登录用户 ?
    6. 对于无 cooki e 的浏览器,如何实现用户登录?
    7. Dj ango 中的 request 和I HttpRespo口se 的作用是什么?
    8. 如何处理图片上传的逻辑 以及展示逻辑?
    9. 介绍一下用过的 Dj an go 缓存粒度

    Form 层

    1. 介绍一下 同 ango 中 Form 的作用 。
    2. Form 中 的 Fi e l d 跟 Mode l 中的 F i e ld 有何关联 ?
    3. 如何在 Form 层实现对某个字段的校验 ?

    Template 层

    1. 如何理解 Django 模板对设计师友好的说法 ?
    2. 日常开发中如何规划 Django 的模板继承和 川elude?
    3. 常用的标签( tag )和过滤器( filter )有哪些?
    4. 在模板中如何处理静态文件?
    5. 在模板中如何处理系统内定义的 URL ?
    6. 如何自定义标签和过滤器?

    Django 进阶

    1. 如何排查Django项目的性能问题?
    2. 如何部署Django项目?不同部署方式之间的差别有哪些7
    3. 部署时如何处理项目中的静态文件?
    4. 如何实现自定义的登录认证逻辑?
    5. 如何理解Django中Model、Form、ModelForm和Fi巳ld、widget之间的关系?
    6. paginator的原理是什么?如何自己实现分页逻辑7
    7. Mod巳l中Fi巳ld的作用是什么?
    8. 什么是SQL注入?ORM又是如何解决这个问题的?
    9. CSRF全称是什么?Django是如何解决这个问题的?
    10. xss攻击是指什么?在开发时应该如何避免这种攻击?
    11. signal的作用以及实现逻辑是什么?
    12. DATABASE配置中CONN_MAX_AGE参数的作用以及使用场景。
    13. CONN_MAX_AGE的实现逻辑是什么?
    14. 用Django内置的User模型创建用户时,是再可以直接用User(username=’the5fire',password=’the5fire’).save()?
    15. 上面的创建方式有什么问题?应该如何处理用户密码?
    16. 使用django-rest-framework如何实现用户认证登录逻辑?
    17. 比ssion模块在Django中的作用是什么?
    18. 如何自定义Django中的权限粒度,实现自己的权限逻辑?
    19. 如何捕获线上系统的异常?
    20. 如何分析某个接口响应时间过长的问题?假设响应时间为2s,一次请求会涉及哪些数据库和缓存查询?

    部署相关

    1. 如何自动化部署项目到生产环境?具体流程是什么?
    2. 介绍一下常用的自动化部署工具。
    3. 用到哪些监控工具?其作用是什么?使用中有什么不足之处?
    4. supervisor的作用是什么?为何使用它?
    5. Gunicorn的作用是什么?为何使用它?
    6. 如何对系统进行压测?如何进行流量预估?
    7. Nginx的作用是什么?是否能独立配置?有没有优化经验?
    8. 发版逻辑是什么?如何保证新版本发生异常时能快速回滚?

    Mysql相关

    1. 如何确定哪些字段需要设置索引?
    2. 什么情况下需要设定字段属性为m工que=True?
    3. 如何排查某个SQL语句的索引命中情况?
    4. 如何排查查询过慢的SQL语句?

    常用算法

    1. Python中字典类型的实现算法。
    2. 你了解的高级语言中的垃圾回收机制有哪些?Python中用的是什么?
    3. 介绍一下你知道的缓存相关的算法。
    4. 介绍一下你知道的负载均衡相关的算法。
    5. 介绍一下数据库索引相关的算法。
    展开全文
  • 用法就是在内嵌函数上装饰一下,记住原函数信息。 再次运行一下,你会发现函数名已经正常显示了。 from functools import wraps# 多重装饰器def deco_iron_new(func):print('deco_iron_new 开始运行....')@wraps...

    1 一切都要从函数说起

    我们都知道一个函数可以返回一些数据,然后这些数据可以被其他函数调用。函数里还可以有若干个参数,可以让函数根据不同的输入值进行不同的计算,然后得到新的结果。

    418a803012521105e7f34a9bdc6a0f97.gif

    于是,我们的故事就可以开始了。

    现有第一个函数,tony,很简单,直接返回tony,然后你叫他一声。他就回应你:tony。

    def tony():return 'tony'
    tony()
    'tony'

    紧接着,我们来到第二个函数,他可以根据传入的一个男人man,然后说出谁是钢铁侠。

    def iron_man(man):print(f'{man} is iron man!')

    由于在Python里面任何东西都是个对象,函数也不例外,我们就直接把上面的tony()(注意括号啊!)直接传给iron_man,会得到什么呢?
    如你所见,结果很简单,当做参数的函数,返回值传入了新的函数,然后组合出现了我们看到的结果。

    iron_man(tony())
    tony is iron man!

    刚才只是简单的说一下谁是钢铁侠,下面他就要变身了。

    a1e1e0cc4e61081be7e58d9c4f0c0ca1.png

    既然函数可以当做参数,那么我们在定义复杂一点的函数。如下所示,把函数名func当做参数,然后嵌套写一个包装函数 wrapper,这个函数里面调用func,这时候是有括号的,当做他的变身。
    同时这行代码的上下,分别添加语句,分别显示变身前和变身后。

    这个函数的最后,返回的是内部包裹的函数名,其实就是个函数对象,但是,没有调用呢。

    # tony要变身def deco_iron(func):def wrapper():print('开始准备变身')man = func()print(f'{man} 正在变身!')print('变身结束!')return wrapper

    接下来,我们调用这个复杂函数,就可以完成钢铁侠的变身了。和刚才不同的是,注意我们只是传入函数名。因为这个函数要在刚才包裹他的函数内部运行。
    我们可以给个新的变量new_tony,注意咯,这时候得到的是刚才复杂函数的返回值,也就是内部的函数对象。如果要调用,需要加括号的。

    new_tony = deco_iron(tony)  # 注意!!没有括号,去变身里面执行

    试一下就知道了。

    new_tony()
    开始准备变身
    tony 正在变身!
    变身结束!

    如你所见,变身成功。下面问题来了:有没有可能直接运行tony就达到效果?

    当然有,我们把刚才的返回值变量直接写作tony,运行看看:

    tony = deco_iron(tony)tony()
    开始准备变身
    tony 正在变身!
    变身结束!

    回顾一下,我们现在相当于还是调用名为tony的函数,但是,在没有改变原来函数的情况下,我们给他添加了整套的变身语句。如同钢铁盔甲增强了tony的身体素质,我们用了一个嵌套函数增强了刚才简简单单的tony函数,但其实从头到尾没有修改原来的tony函数。这就给代码增添了无限的可能。

    但,这样调用来调用去的有点啰嗦,需要简化。

    2 装饰器@魔法出现了

    Python是一个以简洁著称的语言,刚才那种写完嵌套函数,调用一下,又返回同样的函数名,然后等着再调用的做法,直接可以用一个@符号搞定。
    这时候的@相当于tony = deco_iron(tony),然后直接加到原来的函数上头就ok了。如下所示:

    @deco_irondef tony():return 'tony'

    调用一下这个函数,你会发现已经被装饰加强了。这就是装饰器了。

    tony()
    开始准备变身
    tony 正在变身!
    变身结束!

    3 装饰器的变身

    传递参数

    函数是可以传递参数的,如果我们想让被装饰的函数传递参数可以这样做:

    • 正常添加任何参数,比如我们这里加个msg

    • 在装饰器函数的内部函数中,使用*args, **kw接收任何参数就ok了

    为了刚方便查看测试效果,我们这里再用func.__name__格式化输出一下函数名。

    # 传递参数def deco_iron(func):print('deco_iron开始运行....')def wrapper(*args, **kw):print('开始变身,在执行{}函数前'.format(func.__name__))print(args, kw)func(*args, **kw)print('钢铁侠变身完成,结束{}函数'.format(func.__name__))return wrapper

    下面,从新装饰一下tony函数,你会发现,定义之后就会自动运行上面装饰器函数的第一句话。其实这就是在Python内部,自动完成了tony = deco_iron(tony),悄悄第一次运行了整个装饰器函数。接下来我们要调用一下下面的函数,才会运行外部函数的返回结果,从而进入的最内部的函数。

    @deco_irondef tony(msg):print(f'tony说:{msg}')
    deco_iron开始运行....
    tony('我来啦!')
    开始变身,在执行tony函数前
    ('我来啦!',) {}
    tony说:我来啦!
    钢铁侠变身完成,结束tony函数

    多重装饰器

    单层的装饰器说完了。下面说一下多重装饰器。比如钢铁侠,有时候要去和更强大的敌人战斗,需要多穿一层盔甲。

    于是,DE8UG新写个带new后缀的函数,同时在里面适当修改提示语句。

    # 多重装饰器def deco_iron_new(func):print('deco_iron_new开始运行....')def wrapper(*args, **kw):print('deco_iron_new 开始变身,在执行{}函数前'.format(func.__name__))print(args, kw)func(*args, **kw)print('deco_iron_new 钢铁侠变身完成,结束{}函数'.format(func.__name__))return wrapper

    接下来就是使用了。只需要在要装饰的函数上,依次往上叠加@装饰函数名,就ok。这时候,定义语句被执行时候,你会发现同样执行了装饰器里面的第一句说明。

    看一下执行顺序,是按照装饰顺序,从内到外执行的。

    @deco_iron_new@deco_irondef tony(msg):print(f'tony说:{msg}')
    deco_iron开始运行....
    deco_iron_new开始运行....

    但,我们需要注意的是,当实际执行tony函数时,会发生什么,先看结果再解释。

    tony('我要超级变身')
    deco_iron_new 开始变身,在执行wrapper函数前
    ('我要超级变身',) {}
    开始变身,在执行tony函数前
    ('我要超级变身',) {}
    tony说:我要超级变身
    钢铁侠变身完成,结束tony函数
    deco_iron_new 钢铁侠变身完成,结束wrapper函数

    你会发现一个有意思的现象,实际执行的函数,是按照装饰的层次,从外到内执行了。

    为什么呢?
    仔细思考上文的装饰器语法含义,我们会发现刚才定义时,从内到外执行的多个装饰器函数,每个装饰器函数都返回一个函数对象。这时候最外层的返回函数对象当然就在最外面了。
    当被装饰后的函数具体执行时,就像剥洋葱一样,从外到内,一层层的执行具体的语句。

    发现函数名问题

    相信眼尖的同学看出来了,刚才多层装饰器一次出现的说明语句,对于函数名的解析,似乎有点问题,最外层的没有正确说明要执行的tony函数。

    这是为什么?

    在函数执行的时候,会有自己的变量作用域,当多层嵌套的装饰器执行时,虽然运行不出错,但其实内部的作用域出现的混乱。比如我们看见的错误的显示了内嵌函数的名称。

    这个怎么解决呢,Python自己带来的问题,当然可以自己解决。直接使用functools里的wraps装饰器,来修复这个作用域问题。用法就是在内嵌函数上装饰一下,记住原函数信息。

    再次运行一下,你会发现函数名已经正常显示了。

    from functools import wraps# 多重装饰器def deco_iron_new(func):print('deco_iron_new 开始运行....')@wraps(func)def wrapper(*args, **kw):print('deco_iron_new 开始变身,在执行{}函数前'.format(func.__name__))print(args, kw)func(*args, **kw)print('deco_iron_new 钢铁侠变身完成,结束{}函数'.format(func.__name__))return wrapper# 传递参数def deco_iron(func):print('deco_iron开始运行....')@wraps(func)def wrapper(*args, **kw):print('开始变身,在执行{}函数前'.format(func.__name__))print(args, kw)func(*args, **kw)print('钢铁侠变身完成,结束{}函数'.format(func.__name__))return wrapper
    @deco_iron_new@deco_irondef tony(msg):print(f'tony说:{msg}')
    deco_iron开始运行....
    deco_iron_new 开始运行....
    tony('再次变身')
    deco_iron_new 开始变身,在执行tony函数前
    ('再次变身',) {}
    开始变身,在执行tony函数前
    ('再次变身',) {}
    tony说:再次变身
    钢铁侠变身完成,结束tony函数
    deco_iron_new 钢铁侠变身完成,结束tony函数

    如果装饰器加参数呢

    DE8UG小提示:以后如何查询此文档以及获取其他帮助?
    在手机上搜索「Python随身听」官方号,点击右上角「...」,进入主题页面,找到页面上方的放大镜?,点击放大镜?搜索关键词即可。

    下面再来个复杂点的。既然装饰器本身还是函数,那么当然可以继续添加参数。

    怎么加呢?
    再嵌套一层函数,把参数传给它!

    8b21a3b33bcc84ebce28dca0290125f1.png

    比如,钢铁侠要带着小辣椒一起飞,可以这么写:

    # 如果装饰器加参数呢?def deco_params(name):def deco_iron(func):print('deco_iron开始运行....')@wraps(func)def wrapper(*args, **kw):print('新参数需要处理:', name)print('开始变身,在执行{}函数前'.format(func.__name__))func(*args, **kw)print('钢铁侠变身完成,结束{}函数'.format(func.__name__))return wrapperreturn deco_iron@deco_params('小辣椒')def tony(msg):print(f'tony说:{msg}')
    deco_iron开始运行....
    tony('hi, 小辣椒')
    新参数需要处理:小辣椒
    开始变身,在执行tony函数前
    tony说:hi, 小辣椒
    钢铁侠变身完成,结束tony函数

    4 装饰器的用途

    Python中,装饰器的用途很多。我们举一个web应用的例子。

    我们都知道一个网站往往会有多个连接,根据不同的连接地址,进行路由转发,可以显示不同的业务内容。于是,我们可以这样定义一个类MyApp,表示网络应用。

    里面放置三个函数,完成路由转发的功能:

    • 初始化函数,放置一个字典

    • 注册函数,用来当其他业务函数的装饰器。这是个嵌套函数,里面可以根据不同的路由页面名称,把函数名保存到字典

    • 实际页面调用函数。

    接下来使用时,可以很方便把不同页面的响应函数,注册到不同的路由下面。当访问不同页面时,根据响应的参数直接调用同一个方法,就能自动去转换到对应的页面内容了。

    # 装饰器,各种用途# author: De8uGclass MyApp():def __init__(self):self.func_map = {}def register(self, name):def func_wrapper(func):print('func_wrapper: ', name, func)self.func_map[name] = funcreturn funcreturn func_wrapperdef call_method(self, name=None):func = self.func_map.get(name, None)if func is None:raise Exception("No function registered against - " + str(name))return name, func()# 创建对象,用于添加方法进行调用app = MyApp()@app.register('/')def main_page_func():return "This is the main page."@app.register('/next_page')def next_page_func():return "This is the next page."print(app.call_method('/'))print(app.call_method('/next_page'))
    func_wrapper:  / 
    func_wrapper: /next_page
    ('/', 'This is the main page.')
    ('/next_page', 'This is the next page.')

    ok,以上就是DE8UG给你带来的装饰器的相关知识了。你学会了吗?有任何问题,建议欢迎到「Python随身听」留言,感谢关注?。


    看到这里的同学们有福利咯

    无论你是点赞?,在看?,转发→,

    还是留言?,赞赏?,

    都会作为呈堂证供,

    转化为后期DE8UG收费课程的相应积分,

    无上限赠送

    感谢你对Python随身听的支持

    6a8509245135f87667c552d0782af321.png

    想查看更多?

    请点击原文⬇️

    展开全文
  • python核心部分创建对象中各种名词的定义及用法如果你对自己要求不高,觉得学习python为了简单的处理一下文字而已那就可以停止了,但是既然选择了开始学习,那么为什么不坚持到底呢?给自己的人生多一种选择。今天...

    继续上一章的内容,上一章说到了python的核心部分-创建对象的各种名词的定义,包括:对象,类,多态,封装,继承,接口和内省,面向对象设计。还有不清楚的可以review一下前文。python核心部分创建对象中各种名词的定义及用法

    如果你对自己要求不高,觉得学习python为了简单的处理一下文字而已那就可以停止了,但是既然选择了开始学习,那么为什么不坚持到底呢?给自己的人生多一种选择。

    今天我们要说的内容是类与类型。文章较长,仔细看吧

    零碎重点:

    1. 首先举个例子帮你理解一下类。 百灵鸟类就是鸟类的一个子类,而鸟类就是百灵鸟类的超类。

    2. PS:python中类习惯上使用单数名词,并且首字母大写。

    3. 类的实例:所有对象都属于某一个类,而这就是类的实例。

    一张简单的草图可以快速帮你理解他们之间的关系

    b6ee0f59adb5ba0b45d3c96233a16eea.png

    创建自己的类:

    以代码来解释如何创建以及注意事项。

    代码的解释和注意事项:

    Person: 类的名字,class语句会在函数定义地方创建自己的命名空间。

    在新式类语法中,需要在模块或者脚本开始的地方防止赋值语句:_metaclass_ = type 。

    代码中直接调用类的部分就是指的类的实例。

    b1403cdff8a50fc3be0e237d593c0792.png

    代码快速理解:

    把类比作图纸,类的实例化对象是真正可以居住的房子。一个图纸可以设计出成千上万的房子,长得都差不多。但是它们都可以由不同的主人,self相当于每个房子的门牌号,由self就可以轻松找到家。

    self: 变量的对象自身,对自己的引用。self参数实际上正是方法和函数的区别。

    问题延伸:

    怎么让方法和特性便的私有(从外部无法访问)?

    在定义它的名字前面加上双下划线__。

    eg : def __inaceessible(self):

    漏洞:其实可以访问的,你可以理解为前面加上单下划线的类名格式形式。

    指定超类(超类也叫做父类,基类,超类)

    用法:将其他类名写在class语句后的圆括号内指定超类

    31ed336a1979597161c64c23b325612d.png

    解释:Filter是一个用于过滤序列的通用类,Filter类的用处在于它可以用作其他类的超类,比如SPAMFilter类,可以将序列中的"SPAM"过滤出去。

    多个超类:

    a7174c86ccd4562095b059cae098aa58.png

    代码涉及到了多重继承,是非常有用的,但是尽量少用。

    类的特性与函数,方法:(这一块我们全部用上文中指定超类的代码为例子)

    issubclass函数: 查看一个类是不是另外一个的子类。

    >>> issubclass(SPAMFilter,Filter)

    True

    >>> issubclass(Filter,SPAMFilter)

    False

    __bases__特性:查看已知类的超类(们)。

    __dict__特性:查看对象中所有存储的值。

    >>> SPAMFilter.__bases__

    (,)

    >>> Filter.__bases__

    ()

    isinstance方法:检查一个对象是否是一个类的实例。

    >>> s=SPAMFilter()

    >>> isinstance(s,SPAMFilter)

    True

    >>> isinstance(s,Filter)

    True

    >>> isinstance(s,strs)

    False

    __class__特性:查看一个对象属于哪个类。

    >>> s.__class__

    hasattr:检查所需的方法是否存在。

    callable(x): 检查所需的方法是否可调用。在新的python用中hasattr(x,'__call__')代替。

    展开全文
  • 犹记得当初学习Python的时候,对于 Python一切皆对象 很是懵逼,因为Python是面向对象的动态型语言,而在函数及高阶函数的应用中,如若对于一切皆对象不是有很透彻的了解,基础不是那么牢固的话,那么对于今后的...
  • 摘要:01 学会查看Python官网的参考资料02 两道创建类(class)的练习题01 学会使用Python官网文档第一步:记住Python的官方网址:http://python.org 然后打开它第二步:打开我们需要的文档页。点击上方的Docs一栏...
  • 环境准备免费的数据分析在线实验云环境创帆云_python云环境云主机_wordpress网站建设_个人网站_免费上云_数据爬虫_免费bi工具_数据分析​www.bistudio.com.cn选择数据分析开发平台提示:“Python专业笔记”在线查阅...
  • Python处理数据大家都不陌生了,属常规操作,但常规之下还是也有些暗藏技巧的,本篇东哥分享6个好玩高效的操作,帮助大家提高效率。一、Pandas ProfilingPandas Profiling提供数据的一个整体报告,是一个帮助我们...
  • 但是之前都是用正则表达式来解析内容的,可能有小伙伴对正则表达式不理解,于是乎,我找到一个相对好用的库来帮助我们解析内容。配置环境pyhton3 + requests 库 + lxml 库。在国内安装可能会卡住,可以参考以下指令...
  • 文字介绍可能看得很晕,看不懂和不理解当然看得晕,不用怕,慢慢看到最后你会有所收获。如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向...
  • 本文实例讲述了Python面向对象中类(class)的简单理解用法。分享给大家供大家参考,具体如下:我们先来创建一个简单的类class Fish(object):passxiaoming = Fish()一个基础类(base class) Fish(鱼)类就创建好了。...
  • Python处理数据大家都不陌生了,属常规操作,但常规之下还是也有些暗藏技巧的,本篇东哥分享6个好玩高效的操作,帮助大家提高效率。一、Pandas ProfilingPandas Profiling提供数据的一个整体报告,是一个帮助我们...
  • 本文实例讲述了Python面向对象中类(class)的简单理解用法。,具体如下:我们先来创建一个简单的类class Fish(object):passxiaoming = Fish()一个基础类(base class) Fish(鱼)类就创建好了。class Fish(object)等同...
  • 刚开始学习Python的类写法的时候觉得很是麻烦,为什么定义时需要而调用时又不需要,为什么不能内部简化从而减少我们敲击键盘的次数?你看完这篇文章后就会明白所有的疑问。self代表类的实例,而非类。实例来说明:...
  • 从知乎上面的一个回答中可以尝试去理解:对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。类:类是一个模板,它...
  • 理解元类之前,我们需要再理解一下Python中的类。在Python中,一切皆为对象,我是指所有的东西——都是对象,它们要么是类的实例,要么是元类的实例。这包括整数、字符串、函数以及类。它们全部都是对象,而且它们...
  • self代表类的实例,而非类。执行结果如下从上面的例子中可以很明显的看出,self代表的是类的实例。...self可以不写吗在Python的解释器内部,当我们调用t.prt()时,实际上Python解释成Test.prt(t),也就是说把sel...
  • 主要介绍了Python面向对象中类(class)的简单理解用法,结合实例形式分析了Python面向对象程序设计中类(class)的基本概念、原理、定义与使用方法,需要的朋友可以参考下
  • 本文实例讲述了python中metaclass原理与用法。分享给大家供大家参考,具体如下: 什么是 metaclass. metaclass (元类)就是用来创建类的类。在前面一篇文章《python动态创建类》里我们提到过,可以用如下的一个观点来...
  • 从知乎上面的一个回答中可以尝试去理解: 对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。 类:类是一个模板,...
  • dataclasses这是 Python 最新的 Dataclasses 系列的第二部分内容。在第一部分里,我介绍了dataclasses 的一般用法。这篇博客主要介绍另一个特征:dataclasses.field。我们已经知道Dataclasses会生成他们自身的__init...
  • 参考链接:https://www.cnblogs.com/dkblog/archive/2011/02/24/1980654.htmlhttps://www.cnblogs.com/wjx1/p/5084980.htmlpython...但是在调用的时候不必显示传递,python会自动传递:class Example(object): # 在...
  • 参考链接:https://www.cnblogs.com/dkblog/archive/2011/02/24/1980654.html ... python中对象的方法第一个参数一般都是self,用于传递对象本身。但是在调用的时候不必显示传递,python会自动传递:  class E...
  • 从知乎上面的一个回答中可以尝试去理解:对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。类:类是一个模板,它...
  • 装饰器(Decorator)Python 的装饰器是任何可调用对象(callable object),用于修改函数(Function)或类(Class)。按照用途可分为:函数装饰器类装饰器装饰器的接口定义可概括为:接收某个函数或类的引用作为参数...
  • 刚开始学习Python的类写法的时候觉得很是麻烦,为什么定义时需要而调用时又不需要,为什么不能内部简化从而减少我们敲击键盘的次数?你看完这篇文章后就会明白所有的疑问。 self代表类的实例,而非类。 实例来说明:...
  • tensorflow中python中with用法理解

    千次阅读 2017-09-22 19:06:23
    出处:... class tf.Session A class for running TensorFlow operations. A Session object encapsulates the environment in which Operatio
  • 当在子类需要调用父类的方法时,在python2.2之前,直接用类名调用类的方法,即非绑定的类方法,并把自身对象self作参数传进去。class A(object):def say(self):print 'I am A'class B(A):def say(self):print 'I am ...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 167
精华内容 66
关键字:

pythonclass用法理解

python 订阅