1. 多态:不同的子类对象,可以调用相同的父类方法,通过改写父类的方法,产生不同的执行结果
  2. instance和type的区别: instance能够顺延到父类,比对对象与父类是否类型一致。而type只能比对当前对象
  3. 类变量和实例变量:
    class Date:
    
      def __init__(self, year, month, day):
    self.year = year
    self.month = month
    self.day = day def tomorrow(self):
    self.day += 1 @staticmethod
    def parse_from_string(date_str):
    year, month, day = tuple(date_str.split("-"))
    return Date(int(year), int(month), int(day)) @staticmethod
    def valid_str(date_str):
    year, month, day = tuple(date_str.split("-"))
    if int(year)>0 and (int(month) >0 and int(month)<=12) and (int(day) >0 and int(day)<=31):
    return True
    else:
    return False @classmethod
    def from_string(cls, date_str):
    year, month, day = tuple(date_str.split("-"))
    return cls(int(year), int(month), int(day)) def __str__(self):
    return "{year}/{month}/{day}".format(year=self.year, month=self.month, day=self.day) if __name__ == "__main__":
    new_day = Date(2018, 12, 31)
    new_day.tomorrow()
    print(new_day) #2018-12-31
    date_str = "2018-12-31"
    year, month, day = tuple(date_str.split("-"))
    new_day = Date(int(year), int(month), int(day))
    print (new_day) #用staticmethod完成初始化
    new_day = Date.parse_from_string(date_str)
    print (new_day) #用classmethod完成初始化
    new_day = Date.from_string(date_str)
    print(new_day) print(Date.valid_str("2018-12-32"))

    类方法比静态方法好的地方就是:静态方法return时,调用的时候必须与原类名相同。而类方法如果有返回值,就不用与原类名字相同。一般用cls代替。(当然其他的名字也可以)

  4. 数据封装和私有属性:self.__birthday  = birthday 如果不对数据进行封装,那么在类的外面直接对类属性改值,用户能够看到该属性。一般使用get和set对该属性进行封装,然后通过该方法对该属性进行读取和修改。一般在私有属性,Python会对该属性名进行变形,改成_classname__attr 例如 user = User, print (user._User__birthday) .......如果子类继承父类,需要修改父类的私有属性通过修改__init__方法
  5. Python的自省机制:通过一定的机制查询到对象的内部结构。通过User.__dict__方法查询属性 (会使用__mro__)方法,类和实例都可以用。还有dir()方法
  6. mixin 案例,因为不怎么推荐使用多继承:
    #mixin模式特点
    # 1. Mixin类功能单一,简单。一般只有一个方法实现一个功能。名字尽量以Mixin结尾
    # 2. 不和基类关联,可以和任意基类组合(就可以多个mixin 来重组成一个功能较复杂的类), 基类可以不和mixin关联就能初始化成功
    # 3. 在mixin中不要使用super这种用法
  7. #try except finally
    def exe_try():
    try:
    print ("code started")
    raise KeyError
    return 1
    except KeyError as e:
    print ("key error")
    return 2
    else:
    print ("other error")
    return 3
    finally:
    print ("finally")
    # return 4

    这里值得注意的是为什么最后返回值是4而不是123。因为1234按照顺序押入栈中后,取最上面的值,所以返回的是4

  8. 上下文管理器协议:
    #上下文管理器协议
    class Sample:
    def __enter__(self):
    print ("enter")
    #获取资源
    return self
    def __exit__(self, exc_type, exc_val, exc_tb):
    #释放资源
    print ("exit")
    def do_something(self):
    print ("doing something") with Sample() as sample:
    sample.do_something()

    使用with 语句,就会自动调用enter和exit两个魔法函数

  9. import contextlib
    
    @contextlib.contextmanager
    def file_open(file_name):
    print ("file open")
    yield {}
    print ("file end") with file_open("bobby.txt") as f_opened:
    print ("file processing")

    简化了上下文管理器,在yield生成器上面的是enter方法,然后下面是exit方法。这样就使整个按照顺序的方法来完成。

深入Python的类和对象的更多相关文章

  1. 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法

    1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...

  2. python的类和对象2(self参数)

    python的类和对象2(self参数) 1.python里面对象的方法都会有self参数,它就相当于C++里面的this指针:绑定方法,据说有了这个参数,Python 再也不会傻傻分不清是哪个对象在 ...

  3. Python初识类与对象

    Python初识类与对象 类与对象 世界观角度分析类与对象 类是一个抽象的概念,而对象是一个实体的存在,对象由类创造而出,每个对象之间互相独立互不影响,一个对象可以同时拥有多个类的方法,实例化就是通过 ...

  4. python的类与对象

    类与对象 1.什么是类 类和函数一样是程序编程的一种方式,在处理某些问题的时候类比函数更加适合让编程变得简化,在python里面函数式编程和类编程都是为了简化代码的一种编程方式,具体应用那个则由具体问 ...

  5. python的类和对象——番外篇(类的静态字段)

    什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是它.后面大多数情况可能会简称为类变量.): 我们看上面的例子,这里的money就是静态字段,首 ...

  6. python的类和对象——进阶篇

    写在前面的话 终于,又到了周五.当小伙伴们都不再加班欢欢喜喜过周末的时候,我刚刚写完这一周的游戏作业,从面对晚归的紧皱眉头到现在的从容淡定,好像只有那么几周的时间.突然发现:改变——原来这么简单.很多 ...

  7. Python 定制类与其对象的创建和应用

    1.创建新类Athlete,创建两个唯一的对象实例sarah james,他们会继承Athlete类的特性 >>> class Athlete: def __init__(self, ...

  8. 【Python】类和对象、继承、使用文件、存储、异常、标准库(不懂)

    当你调用这个对象的方法MyObject.method(arg1, arg2)的时候,这会由Python自动转为MyClass.method(MyObject, arg1, arg2)——这就是self ...

  9. 搞懂Python的类和对象名称空间

    代码块的分类 python中分几种代码块类型,它们都有自己的作用域,或者说名称空间: 文件或模块整体是一个代码块,名称空间为全局范围 函数代码块,名称空间为函数自身范围,是本地作用域,在全局范围的内层 ...

  10. Python深入类和对象

    一. 鸭子类型和多态 1.什么是鸭子类型: 在程序设计中,鸭子类型(英语:Duck typing)是动态类型和某些静态语言的一种对象推断风格."鸭子类型"像多态一样工作,但是没有继 ...

随机推荐

  1. Python-利用flask模块创建web接口

    一.创建一个实现登录的接口 import flask from flask import request #获取参数 # import json #post请求传入json对象时,通过json获取参数 ...

  2. Vision-Based Positioning for Internet-of-Vehicles

    Vision-Based Positioning for Internet-of-Vehicles Introduction Ego-positioning aims at locating an o ...

  3. 【luogu P2385 青铜莲花池】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2385 莲花池什么的最漂亮啦! 最近刷了两天搜索= =我搜索一直是弱菜 直接套bfs #include < ...

  4. Android学习笔记_29_样式和主题

    一.简单样式定义和使用: android中的样式和CSS样式作用相似,都是用于为界面元素定义显示风格,它是一个包含一个或者多个view控件属性的集合.如:需要定义字体的颜色和大小. 在Android中 ...

  5. 将某页面中ajax中获取到的信息放置到sessionStorage中保存,并在其他页面调用这些数据。

    A页面代码: var obj = data.data; var infostr = JSON.stringify(obj);//转换json sessionStorage.obj = infostr; ...

  6. ios应用数据存储方式(归档) - 转

    一.简单说明  1.在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦.  2.偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置 ...

  7. TortoiseSVN SendRpt.exe not found解决方案

    重启了Explorer.exe即可.这里也补充下简单的重启Explorer.exe的方法:打开任务管理器,找到“Windows资源管理器”,右键--重新启动. 或者,右键--结束任务,然后点击 文件- ...

  8. JDBC配置文件db.properties(Mysql) 及dbutils的编写

    #数据库驱动driver=com.mysql.jdbc.Driver#数据库连接url=jdb:mysql://localhost:3306/newdb3?useUnicode=true&ch ...

  9. 汉化manjaro下的火狐浏览器

    1.下载 汉化包 sudo pacman -S firefox-i18n-zh-cn 2.查看add-ons下的language选项有没有已安装的包 3.在浏览器的地址栏输入 搜索intl.local ...

  10. 针对 npm ERR! cb() never called! 问题

    在开发项目安装依赖时(npm install) 往往会报  npm ERR! cb()never called!的错误 如图: 解决方法: 一.首先要以管理员模式打开cmd清除你的npm缓存 : np ...