Python高级知识点学习(二)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介:

image.png

深入类和对象

鸭子类型
问:什么是鸭子类型?
答:当看到一只鸟走起路来像鸭子,游泳像鸭子,叫起来也像鸭子,那么这只鸟就可以被看做鸭子。(所有的类或对象,都实现了共同的方法,方法名要一样,这样的话这些类就归为一种类型,在调用时同时调用同样的方法)

在java中,要实现多态,所有子类必须继承父类并重写父类的方法;
在python中,python中对象和java不同,变量是动态的可以指向任何一个类型。

class Cat():
   def say():
      pass
class Dog():
   def say():
      pass
class Duck():
   def say():
      pass

三个类共同实现同一个方法且方法名相同,就实现了多态。
Python多态比Java简单正是因为python是动态语言。

抽象基类abc模块

何为抽象基类?
继续用java做比较,Python这里抽象基类可以当做java中的接口,java中是无法实现多继承的,java只能继承一个类,但是可以继承多个接口,接口是不能用来实例化的;所以Python里边抽象基类也是不能实例化的。

python是动态语言,动态语言是没有变量类型的,Python中变量只是个符号而已,它可以指向任何类型的对象。

所以在Python中也就不存在多态这种概念,我们可以赋值任何类型数据给Python中的变量,而且它是可以修改的,所以说它就不需要像java中一样去实现多态,因为本身从语言层面讲就是支持多态的语言。

动态语言和静态语言非常大的区别之一就是静态语言不需要我们指明变量类型,所以动态语言中也就少了编译时检查错误的环节,python中写错了代码只能在运行中发现错误。

不同魔法函数就赋予了类不同特性,和java非常大的区别就是不需要去继承某一个指定的类。

鸭子类型和魔法函数构成了Python语言的基础,也就是Python中的协议。
我们只需要去实现指定的魔法函数,类就可以是某种类型的对象,不同魔法函数具有的特性不同,这种使用魔法函数事先约定好的做法我们都可以称之为一种协议。

抽象基类用途:

  1. 我们在某些情况之下希望判定某个对象的类型
  2. 我们需要强制某个子类必须实现某些方法

抽象基类用法:

  1. 在基础类中,我们去设定好一些方法,所有继承这个基类的类都必须覆盖抽象基类的方法,
  2. 抽象基类是无法实例化的
  3. 所有的抽象基类继承的必须是metaclass=ABCMeta

在做框架编程时,往往我们需要使用框架者在使用类时必须实现类中的一些方法,这时候可以使用抽象基类,举了例子:

class CacheBase(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def get(self, key):
        pass

    @abc.abstractmethod
    def set(self, key, value):
        pass

class RedisCache(CacheBase):
       pass

redis_cache = RedisCache()

运行结果:TypeError: Can't instantiate abstract class RedisCache with abstract methods get, set
在实例化RedisCache()这个时,就开始报错了,错误提示让我们必须实现get set方法。

补全这两个方法后运行就不报错了

class RedisCache(CacheBase):

    def set(self, key, value):
        pass

    def get(self, key):
        pass

redis_cache = RedisCache()

type和isinstance区别

尽量使用isinstance判断类型,避免使用type产生误差
is 和 == 符号 区别:

  • is用法判断id是否相同
  • ==用法判断值是否相等

类变量和实例变量(对象变量)

先看代码:

class A:
    # 类变量
    aa = 1

    def __init__(self, x, y):
        # self是类的实例
        # 实例变量
        self.x = x
        self.y = y
        # 上边赋值后 x y 都属于实例了 不再属于类了

a是实例 A是类   aa是类变量 类变量在所有实例中是共享的
a = A(2, 3)
A.aa = 11
a.aa = 100  # a实例新建一个属性 把aa放到a实例中  a.aa和A.aa是独立的
print(a.x, a.y, a.aa)
print(A.aa)

b = A(3, 5)
print(b.aa)

运行结果:
2 3 100
11
11

解释代码:

新建了一个名为A的类,类中新建类属性aa = 1
类中新建构造函数,绑定两个变量x y。

属性查找方式,向上查找,首先查找对象里有没有,再查找类中有没有
类变量和实例变量是独立的存在

  • 类变量在所有实例中是共享的
  • a.aa = 100:a实例新建一个属性 把aa放到a实例中 a.aa和A.aa是独立的。

建议以上代码反复测试加以记忆。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
2月前
|
Python
python知识点
【8月更文挑战第27天】python知识点
35 1
WK
|
2月前
|
存储 机器学习/深度学习 JSON
Python入门知识点
Python入门覆盖历史、设计理念、变量、数据类型、控制结构等。了解Python的发展,掌握动态类型的灵活性,熟悉整数、浮点数、字符串等数据类型。学会if/else、for/while循环构建逻辑流程,使用def定义函数,lambda快速创建匿名函数。通过类实现面向对象编程,利用模块和包组织代码。掌握try-except处理异常,open()进行文件操作。利用标准库和第三方库增强功能,理解集合、字典、列表推导式的应用,深入魔法方法、递归、装饰器等高级特性,以及上下文管理器和字符串、列表、元组的操作技巧。
WK
28 0
|
22小时前
|
数据采集 数据挖掘 大数据
【Python篇】详细学习 pandas 和 xlrd:从零开始
【Python篇】详细学习 pandas 和 xlrd:从零开始
7 2
|
14天前
|
Python
python之基础知识点
python之基础知识点
22 3
|
27天前
|
监控 Python Windows
python知识点100篇系列-pysnooper用于调试
PySnooper是一个便捷的Python调试工具,用于监控代码执行过程及局部变量的变化,替代繁琐的打印语句。作为GitHub上的热门开源项目,它通过装饰器自动记录代码执行细节。安装简便,支持多种平台,可通过pip安装。使用时,只需在目标函数上添加装饰器即可实时查看变量变化或将其记录至日志文件。此外,还支持使用with块对特定代码段进行调试。更多详细信息可参阅其官方使用文档。
python知识点100篇系列-pysnooper用于调试
|
2月前
|
存储 Python
Python时间模块四大必备知识点
Python时间模块四大必备知识点
43 4
Python时间模块四大必备知识点
|
2月前
|
Unix 开发者 iOS开发
开发知识点-Python-virtualenv
`virtualenv`通过其简易性、灵活性与高度的可配置性,成为Python开发中推荐的环境隔离工具之一。随着Python生态的发展,类似的工具如 `venv`(Python 3.3+自带的轻量级环境构建工具)和 `pipenv`(提供更复杂的依赖管理功能)也越来越受欢迎,但 `virtualenv`仍保持着重要的地位,尤其是在需要维护旧项目或者系统没有提供最新工具的情况下。
32 1
|
2月前
|
程序员 测试技术 开发工具
豆瓣评分7.9!世界级讲师耗时5年整理出的Python学习手册!
Python是一门流行的开源编程语言,广泛用于各个领域的独立程序与脚本化应用中。它不仅免费、可移植、功能强大,同时相对简单,而且使用起来充满乐趣。从软件业界的任意一角到来的程序员,都会发现Python着眼于开发者的生产效率以及软件质量,因此无论你的项目是大还是小,选择Python都将带来战略性的优势。 今天给小伙伴们分享的这份手册讲述了完整的Python语言,力争满足“语言”和“原理”两个方面的需求,并拥有足够的深度以便实用。废话不多说,下面展示给大家。
|
2月前
|
数据采集 数据可视化 Ruby
GitHub星标破万!Python学习教程(超详细),真的太强了!
Python 是一门初学者友好的编程语言,想要完全掌握它,你不必花上太多的时间和精力。 Python 的设计哲学之一就是简单易学,体现在两个方面: 1. 语法简洁明了:相对 Ruby 和 Perl,它的语法特性不多不少,大多数都很简单直接,不玩儿玄学。 2. 切入点很多:Python 可以让你可以做很多事情,科学计算和数据分析、爬虫、Web 网站、游戏、命令行实用工具等等等等,总有一个是你感兴趣并且愿意投入时间的。
|
2月前
|
机器学习/深度学习 开发者 Python
Python 与 R 在机器学习入门中的学习曲线差异
【8月更文第6天】在机器学习领域,Python 和 R 是两种非常流行的编程语言。Python 以其简洁的语法和广泛的社区支持著称,而 R 则以其强大的统计功能和数据分析能力受到青睐。本文将探讨这两种语言在机器学习入门阶段的学习曲线差异,并通过构建一个简单的线性回归模型来比较它们的体验。
51 7