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. Android学习笔记_66_图片处理专题

    1.图片缩放:不解析整个图片信息. public class DemoActivity extends Activity { @Override public void onCreate(Bundle ...

  2. scala性能测试

    主要对比scala 的for, while循环,以及和java for while循环作对比 scala代码 object TestScalaClass { var maxindex = 100000 ...

  3. Javascript文件中的控制器II

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  4. Django-rest-framework(二)serializers 使用

    简介 初次见到serializers文件,想必大家都会感到陌生,所以,我们不妨换个词来形容他的作用,那就是django 中的Form,这样是不是感觉熟悉了一点. 实际上,serializers 的作用 ...

  5. ORACLE 账户解除锁定

    用pl/sql连接数据库发现账户被锁定.本以为管理员账户才能解锁.同其他账户登录也能解锁 pl/sql下执行命令 alter user   ****  account unlock ***处为待解锁的 ...

  6. CocoaPods介绍与使用(转)

    一.介绍 (1) CocoaPods是一个用来帮助我们管理第三方依赖库的工具.它可以解决库与库之间的依赖关系,下载库的源代码,同时通过创建一个Xcode的workspace来将这些第三方库和我们的工程 ...

  7. 配置隐私协议 - iOS

    根据苹果隐私协议新规的推出,要求所有应用包含隐私保护协议,故为此在 App 中添加了如下隐私协议模块. 首次安装 App 的情况下默认调用隐私协议模块展示相关信息一次,当用户点击同意按钮后,从此不再执 ...

  8. djano-模板层基础知识

    ########模板层######## 模板层其实就是templates文件夹里的html文件 其实这里的每个html不是真正意义的上html代码,只有经过模板渲染过后才算的上真正的html页面. 一 ...

  9. NEC 框架规范 css function

    /* function */.f-cb:after,.f-cbli li:after{display:block;clear:both;visibility:hidden;height:0;overf ...

  10. nodejs+express开发blog(1)

    前言 Nodejs是一个年轻的编程框架,充满了活力和无限激情,一直都在保持着快速更新.基于Nodejs的官方Web开发库Express也在同步发展着,每年升级一个大版本,甚至对框架底层都做了大手术.在 ...