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. 【luogu P2002 消息扩散】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2002 缩点把原图变为DAG,再在DAG上判断找入度为0的点的个数. 注意一点出度为0的点的个数不等于入度为0 ...

  2. CodeForces 501B Misha and Changing Handles(STL map)

    Misha hacked the Codeforces site. Then he decided to let all the users change their handles. A user ...

  3. 2018年暑假ACM个人训练题7 题解报告

    A:HDU 1060 Leftmost Digit(求N^N的第一位数字 log10的巧妙使用) B:(还需要研究一下.....) C:HDU 1071 The area(求三个点确定的抛物线的面积, ...

  4. php常见的几种排序以及二分法查找

    <?php 1.插入排序 思想: 每次将一个待排序的数据元素插入到前面已经排好序的数列中,使数列依然有序,知道待排序数据元素全部插入完为止. 示例: [初始关键字] [49] 38 65 97 ...

  5. vim_preview_window

    *29.2*    The preview window When you edit code that contains a function call, you need to use the c ...

  6. vue2 自定义全局组件(Loading加载效果)

    vue2 自定义全局组件(Loading加载效果) github地址: https://github.com/ccyinghua/custom-global-component 一.构建项目 vue ...

  7. 互联网高级Java面试总结

    前不久刚换了单位,这段时间抽出时间来总结一下. 本人渣本毕业四年,无大厂工作经验,出来面高级Java. 上家单位是一个知名互联网平台,但是体量不大的小公司(5线互联网公司),但就是出名(职场人都知道~ ...

  8. c#项目总结

    写了将近10年代码了,最后休息,回想了下,感觉什么都没有. 所以打算写一些总结性的文章,先写几个项目,用于c#各个方向的封装使用 最后汇总成一个完善的解决方案.所有项目都在一个解决方案FastAIFr ...

  9. 日常工作linux常用命令

    1:cp 复制文件/文件夹 cp -r  源目录 目标目录 2:mv 文件重命名 mv 源文件/源目录  目标文件/目标目录 3:du -sh 查看当前目录大小 du -l 查看当前目录下文件大小 d ...

  10. eclipse全选包

    按住shift键,点击第一个jar包,然后点击最后一个jar包,就全选了所有jar包,然后添加build path 添加到类路径