1. ''''''
    '''
    1.动态绑定:对于一个类,我们可以对它的实例动态绑定新的属性或方法。
    为了使所有的实例均可以使用动态绑定的属性和方法,我们也可以采用对类直接动态绑定
    '''
    class Student():
    pass
  2.  
  3. s1=Student()
    s1.age=18 #对于实例动态绑定属性
    print(s1.age)
  4.  
  5. def set_age(self,age):
    self.age=age
  6.  
  7. s2=Student()
    s2.set_age=set_age(s2,18) #对于实例动态绑定方法
    print(s2.age)
  8.  
  9. Student.set_age=set_age #对于类直接动态绑定一个方法
    s3=Student()
    s3.set_age(20)
    print(s3.age)
    '''
    2._slot_变量 :
    限制实例可以动态绑定的属性
    对于父类的_slot_变量,对子类不起作用
    '''
    class Teacher():
    __slots__ = ('name','age') #用元组的方式进行限制
  10.  
  11. t1=Teacher()
    t1.name="Mr. Wang"
    t1.age="22"
    # t1.salary="2000" #AttributeError: 'Teacher' object has no attribute 'salary'
    print(t1.name+":"+t1.age)
  12.  
  13. '''
    3.@property
    装饰器
    '''
    class Stu():
    @property
    def score(self):
    return self._score
    @score.setter
    def score(self,value):
    self._score=value
  14.  
  15. s4=Stu()
    s4.score=50
    print(s4.score)
    '''
    4.多重继承:一个子类可以同时继承多个父类
    结构: class 子类名(父类名1,父类名2,...)
    5.__iter__:返回迭代对象
    如果一个类想被用于for ... in循环,类似list或tuple那样,就必须实现一个__iter__()方法,该方法返回一个迭代对象,
    然后,Python的for循环就会不断调用该迭代对象的__next__()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环
    见斐波那契数列
    '''
  16.  
  17. # class Fib(object):
    # def __init__(self):
    # self.a, self.b = 0, 1 # 初始化两个计数器a,b
    #
    # def __iter__(self):
    # return self # 实例本身就是迭代对象,故返回自己
    #
    # def __next__(self):
    # self.a, self.b = self.b, self.a + self.b # 计算下一个值
    # if self.a > 100000: # 退出循环的条件
    # raise StopIteration()
    # return self.a #返回下一个值
    # for n in Fib():
    # print(n)
    '''
    要表现得像list那样按照下标取出元素,需要实现__getitem__()方法:
    '''
    class Fib(object):
    def __getitem__(self, n):
    a, b = 1, 1
    for x in range(n):
    a, b = b, a + b
    return a
    f=Fib()
    print(f[2])
    '''
    6.__str__():我们用这个方法可以将用print方法打印出来的东西按照我们的想法输出
    '''
    class Student1(object):
    def __init__(self, name):
    self.name = name
    def __str__(self):
    return "name:"+self.name
    ...
    print(Student1('Tom'))
    '''
    7.__repr__():
    '''
    s=Student1("Alan")
    '''
    不用print函数时,s本身的状态就是<__main__.Student object at 0x109afb310>,
    这是因为直接显示变量调用的不是__str__(),而是__repr__(),
    两者的区别是__str__()返回用户看到的字符串,而__repr__()返回程序开发者看到的字符串,也就是说,__repr__()是为调试服务的。
    解决办法是再定义一个__repr__()。但是通常__str__()和__repr__()代码都是一样的,所以,有个偷懒的写法:
    '''
    class Student2(object):
    def __init__(self, name):
    self.name = name
    def __str__(self):
    return 'Student object (name=%s)' % self.name
  18.  
  19. __repr__ = __str__
    '''
    8.枚举类:Enum类
    '''
    from enum import Enum
  20.  
  21. Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
    '''
    这样我们就获得了Month类型的枚举类,可以直接使用Month.Jan来引用一个常量,或者枚举它的所有成员:
    '''
    for name, member in Month.__members__.items():
    print(name, '=>', member, ',', member.value)
    '''
    value属性则是自动赋给成员的int常量,默认从1开始计数。
    '''

python学习20之面向对象编程高级的更多相关文章

  1. python学习笔记1 -- 面向对象编程高级编程1

    说起高级其实也就是些基础的东西,但是活用和熟用肯定会大幅度提升代码质量 首先要记录的是面向对象的灵活性,及如何去控制其灵活性,她允许你在实例中新增属性和方法,允许你给类新增属性和方法,也支持在定义类时 ...

  2. python 学习笔记7 面向对象编程

    一.概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." ...

  3. python学习笔记(七):面向对象编程、类

    一.面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一 ...

  4. Python学习笔记之面向对象编程(三)Python类的魔术方法

    python类中有一些方法前后都有两个下划线,这类函数统称为魔术方法.这些方法有特殊的用途,有的不需要我们自己定义,有的则通过一些简单的定义可以实现比较神奇的功能 我主要把它们分为三个部分,下文也是分 ...

  5. python学习笔记1 -- 面向对象编程类和实例

    由于之前有一定基础,所以python中的类的概接受的比较快,与其他语言一样, python也是通过类来进行事务的抽象,一切皆对象,要不然怎么说程序员不缺对象呢. 言归正传,python中类的声明是cl ...

  6. 大数据技术之_16_Scala学习_06_面向对象编程-高级+隐式转换和隐式值

    第八章 面向对象编程-高级8.1 静态属性和静态方法8.1.1 静态属性-提出问题8.1.2 基本介绍8.1.3 伴生对象的快速入门8.1.4 伴生对象的小结8.1.5 最佳实践-使用伴生对象解决小孩 ...

  7. python笔记 - day7-1 之面向对象编程

    python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ...

  8. python学习之路网络编程篇(第四篇)

    python学习之路网络编程篇(第四篇) 内容待补充

  9. python学习9—文件基本操作与高级操作

    python学习9—文件基本操作与高级操作 1. 文件基本操作 打开文件,获得文件句柄:f = open('filename',encoding='utf-8'),open会查询操作系统的编码方式,并 ...

随机推荐

  1. [vijos1234]口袋的天空<最小生成树>

    题目链接:https://vijos.org/p/1234 白天刚刚写完prim的算法,晚上就心血来潮的打了一道最小生成树的题 虽然有题解说可以用prim做,但是这道题明显是加最小的边,感觉krusk ...

  2. [HOJ2662]Pieces Assignment<状态压缩dp>

    描述: 有一个n*m的棋盘(n.m≤80,n*m≤80)要在棋盘上放k(k≤20)个棋子,使得任意两个棋子不相邻(每个棋子最多和周围4个棋子相邻).求合法的方案总数. 输入: 本题有多组测试数据,每组 ...

  3. Gin框架系列01:极速上手

    Gin是什么? Gin是Go语言编写的web框架,具备中间件.崩溃处理.JSON验证.内置渲染等多种功能. 准备工作 本系列演示所有代码都在Github中,感兴趣的同学可以自行查阅,欢迎大家一起完善. ...

  4. Js,JQuery不同方式绑定的同一事件可以同时触发,互不干扰

    比如,onclick绑定,然后jquery.on("click", function(){})绑定等

  5. 关于 Vue 中 我对中央事线管理器的(enentBus)误解

    由于这段时间公司比较闲,就对vue 中的一些模糊的点做了一些加强,突然就想到了常挂在嘴边兄弟组件传值 我理解的兄弟组件的传值是可以跨理由传值的,比如我从http://localhost:8080/lo ...

  6. Java 连接数据库总是报错

    mysql账号密码是正确的,但是一直报账号密码错误. 报错信息: java.sql.SQLException: Access denied for user 'root'@'localhost' (u ...

  7. 微信网页授权,获取微信code,获取access_tocken,获取用户信息

    微信开发中,经常有这样的需求:获得用户头像.绑定微信号给用户发信息.. 那么实现这些的前提就是授权!   1.配置安全回调域名: 在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 ...

  8. LeetCode48, 如何让矩阵原地旋转90度

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode第29篇,我们来看一道简单的矩阵旋转问题. 题意 题目的要求很简单,给定一个二维方形矩阵,要求返回矩阵旋转90度之后的 ...

  9. IDEA使用技巧,如何在JSP中创建Servlet“小程序”

    步骤 1.新建一个java类,实现Servlet接口 2.实现接口中的抽象方法: 3.在web.xml文件中配置好servlet <web-app ......> <servlet& ...

  10. web自动化测试中的PO模式(一)

    1.PO模式的思想 原理: 将页面的元素定位和元素行为封装成一个page类 类的属性:元素的定位 类的行为:元素的操作 页面对象和测试用例分离 测试用例: 调用所需要页面对象中的行为,组成测试用例 测 ...