7.面向对象高级编程

7.1使用__slots__

python动态语言,new 对象后绑定属性和方法

Tip:给一个实例绑定的方法,对其他对象无效。可以通过对class绑定后,所有对象可以调用该方法

如果我们现在只有实例可以添加属性,使用__slots__,只允许对Student实例添加name和age属性,

添加其他属性报错

class Student(object):

__slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称

该限定只对当前对象起作用,其子类不做限定

-----------

7.2 @property  简短的代码又可检查参数得正确性

class Student(object):

def get_score(self):

return self._score

def set_score(self, value):

if not isinstance(value, int):

raise ValueError('score must be an integer!')

if value < 0 or value > 100:

raise ValueError('score must between 0 ~ 100!')

self._score = value

--------------------

class Student(object):

@property

def score(self):

return self._score

@score.setter

def score(self, value):

if not isinstance(value, int):

raise ValueError('score must be an integer!')

if value < 0 or value > 100:

raise ValueError('score must between 0 ~ 100!')

self._score = value

#。把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建了

另一个装饰器@score.setter,  负责把一个setter方法变成属性赋值

------------------

7.3多重继承

类的继承问题http://python.jobbole.com/85685/

class Dog(Mammal, RunnableMixIn, CarnivorousMixIn):

pass

---------

7.4 定制类

__iter__

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)

----------

7.5 枚举类

from enum import Enum

Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))

for name, member in Month.__members__.items():

print(name, '=>', member, ',', member.value)

Enum可以把一组相关常量定义在一个class中,且class不可变,而且成员可以直接比较。

-----------------

7.6使用元类

type() ;

#动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的。

先定义metaclass,就可以创建类,最后创建实例。?完全看不懂

Python 面向对象之高级编程的更多相关文章

  1. Python面向对象的高级编程

    数据封装.继承和多态只是面向对象程序设计中最基础的3个概念.在Python中,面向对象还有很多高级特性,允许我们写出非常强大的功能. 我们会讨论多重继承.定制类.元类等概念. 使用__slots__ ...

  2. python 的一些高级编程技巧

    正文: 本文展示一些高级的Python设计结构和它们的使用方法.在日常工作中,你可以根据需要选择合适的数据结构,例如对快速查找性的要求.对数据一致性的要求或是对索引的要求等,同时也可以将各种数据结构合 ...

  3. 面向对象的高级编程&IO编程

    1.给类对象绑定的函数,只对这个对象生效, 而对类绑定的对象, 所有的对象都可以调用. 栗子: def set_score(self, score): self.score = score s.set ...

  4. Python3入门(九)——面向对象OOP高级编程

    一.使用__slots__限制属性绑定 动态绑定实例的方法: class Person(object): def run(self): print("奔跑吧!") p1 = Per ...

  5. python一步高级编程

    1.==,is的使用 总结 ·is是比较两个引用是否指向了同一个对象(引用比较). ·==是比较两个对象是否相等. 2.深拷贝.浅拷贝 1.浅拷贝 浅拷贝是对于一个对象的顶层拷贝 通俗的理解是:拷贝了 ...

  6. Python面向对象编程高级特性

    ***这里还是根据网上资料,主要是廖雪峰老师的教程学习的笔记,主要介绍python面向对象的高级特性,笔记不全,只是记录自己觉得容易出错的地方*** 1.python作为一种动态语言,他的动态绑定机制 ...

  7. Python高级编程和异步IO并发编程

    第1章 课程简介介绍如何配置系统的开发环境以及如何加入github私人仓库获取最新源码. 1-1 导学 试看 1-2 开发环境配置 1-3 资源获取方式第2章 python中一切皆对象本章节首先对比静 ...

  8. python基础之面向对象高级编程

    面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个"函数"供使用(可以讲多函数中公用的变量封装到对象中) ...

  9. Python学习--11 面向对象高级编程

    多重继承 Python里允许多重继承,即一个类可以同时继承多个类: class Mammal(Animal): pass class Runnable(object): def run(self): ...

随机推荐

  1. vscode切换虚拟环境报错无法加载文件 E:\Python_project\shop_env\Scripts\Activate.ps1,因为在此系统上禁止运行 脚本。

    在使用vscode切换python的虚拟环境时报错 解决方法如下: Windows+x打开面板,选择以管理员身份运行PowerShell,输入: set-executionpolicy remotes ...

  2. 08-Python面对对象进阶

    一.面向对象编程三大特征 Python是面向对象的语言,同样支持面向对象的编程的三大特征:继承,封装,多态. 封装是指隐藏对象的属性和实现细节,只对外提供必要的一些方法,私有属性,私有方法是实现封装地 ...

  3. .Net Core 读取文件中文乱码

    首先,要知道.Net Core和.Net Framework两个环境下很多东西是不同的,接下来要说的这个就是其中一个. Encoding.Default,在  .NET Framework 中,Def ...

  4. MVC + EFCore 项目实战 - 数仓管理系统5 – 菜单配置及里程碑划分

    上次课程我们完成了需求的梳理. 我们根据梳理的需求把菜单配好,另外我们把项目里程碑也配置在系统中,开发和管理都在系统中,形成无文档化管理. 一.菜单配置 根据我们的归纳图,我们先将菜单配置好. 我们遵 ...

  5. 【一起学系列】之命令模式:封装一个简单Jedis

    意图 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作. 命令模式的诞生 [产品]:开发小哥,来活啦,咱们需要设计一款遥控器,核心功能就 ...

  6. Burp Suite Scanner Module - 扫描模块

    Burp Suite Professional 和Enterprise Version的Scaner功能较丰富. 以Professional版本为例,包含Issue activity, Scan qu ...

  7. Python Ethical Hacking - Packet Sniffer(2)

     Capturing passwords from any computer connected to the same network.  ARP_SPOOF + PACKET_SNIFFER Ta ...

  8. Java实现简单的增删改查操作

    需求分析:通过数组 ,完成 对学生信息的 管理 (增删改查)创建1个 学生类创建1个 CRUD的类 – 学生管理类 并测试 在这个程序中我只运用了两个类进行操作 package com.hopu.de ...

  9. 一些matlb会用到的函数

    matlab这种软件功能很强大,但是都不是常常会用到,尤其是像在学生中.每次用的时候总会把一些基本的函数忘记,还的去网上查.我之前在使用的时候也总结过,可惜在一次数据丢失中全没了(︶︹︺). 从现在开 ...

  10. CCNA - Part11 - 隔离广播域的 VLAN 来了

    之前在对交换机的介绍中,我们知道交换机的作用就是隔离广播域,在不需要跨网段传输时,在同一子网中转发数据包从而进行通信.实现的核心原理就是在交换机中拥有一张 MAC 表,记录了对应终端设备和接口之间的关 ...