一、自定义类

1、属性与方法

格式:

class classname:

  def __init__(self,a,b):

   self.a=a

    self.b=b

  def ...

>一般都有一个__init__函数来定义属于这个类的参数,前后都被"__"包围的函数为特殊方法

;以"__"开头的变量只能读,不能写,相当于private数据。

>如果重新实现str,repr等方法,值应使用表象形式:

def __str__(self):

return "({0.a!r},{0.b!r})".format(self)

>如果调用一个类的方法,python就会自动在类树中进行回溯,如果一直找不到就会产生一个AttributeError.

>在方法前加super()表示调用基类的方法,总是调用super().__init__()是一个种合理的做法。

>自定义类的所有实例都支持==,这种比较总是返回False,通过对特殊方法__eq__()进行重新实现,__ne__()也会跟着自动实现。

>如果我们希望避免不适当的比较,可以使用断言(如:assert isinstance(other,Point));也可以用产生TypeError异常来声明不支持这两个对象的比较操作(如:if not isinstance(other,Point):raise TypeError());方法三:if not isinstance(other,Point):return NotImplem-emted,但只有在类只对比较特殊方法进行了重新实现才可能返回NotImplemented。

>isinstance()为内置的函数,以一个对象与一个类(或类构成的元组)为参数,如果对象属于给定的类,或基类,就返回True。

>object提供的比较的特殊方法:__lt__(),__le__(),__eq__(),__ne__(),__ge__(),__gt__()。

2、继承与多态

class classname2(classname):

  def __init__(self)

  ...

classname2是classname的继承类。

多态:给定类的任意对象在使用时都可以看作该类的任意某个基类的对象。

3、使用特性进行属性的存取控制

修饰器(decorator):是一个函数,该函数以一个函数或方法为参数,并返回参数“修饰后”版本。使用修饰器以@符号引导来进行标记。

例(用内置的property()函数对a的属性进行修饰,使a必须为大于0的数):

@property

def a(self):

return self.__a

@a.setter

def a(self,a):

assert a>0,"a must be nonzero and non-negative"

self.__a=a

每个创建的特性都包含getter,setter,deleter等属性。

4、创建完全整合的数据类型

对于不想要的来自于基类的方法,可以用raise Error的来取消这些方法的使用。对于要同时取消多个类的情况,可以借助内置的exec()函数来实现,它会动态地执行从给定对象传递来的代码。

二、自定义组合类

组合类型的特殊方法:

__contains__(self,x) x in y

__delitem__(self,k) del y[k]

__getitem__(self,k) y[k]

__iter__(self)          for x in y :pass 返回序列中y中的项或映射y中键的迭代子

__len__(self)          len(y)

__reversed__(self)  reversed(y)

__setitem__(self,k,v)      y[k]=v

对于赋值=后边的值也可以用or,如果第一个值为False,则使用or后边的值(a= b or 3)。

Python3 面向对象程序设计(类)的更多相关文章

  1. python3 面向对象编程--类的封装和继承

    #python3import refrom urllib import requestimport os class PosterSpider(object):     def __init__(se ...

  2. python3 面向对象、类、继承、组合、派生、接口、子类重用父类方法

    对象是特征(变量)与技能(函数)的结合体而类是一系列对象共同的特征与技能的集合体 class teacher: lesson = "python" def __init__(sel ...

  3. [Python学习笔记][第六章Python面向对象程序设计]

    1月29日学习内容 Python面向对象程序设计 类的定义与使用 类定义语法 使用class关键词 class Car: def infor(self): print("This is ca ...

  4. JavaScript中的面向对象程序设计

    本文内容目录顺序: 1.Object概念讲述: 2.面向对象程序设计特点: 3.JavaScript中类和实例对象的创建: 4.原型概念: 5.原型API: 6.原型对象的具体使用:7.深入理解使用原 ...

  5. Python基础(16)_面向对象程序设计(类、继承、派生、组合、接口)

    一.面向过程程序设计与面向对象程序设计 面向过程的程序设计:核心是过程,过程就解决问题的步骤,基于该思想设计程序就像是在设计一条流水线,是一种机械式的思维方式 优点:复杂的问题的简单化,流程化 缺点: ...

  6. 第7章 Python类型、类、协议 第7.1节 面向对象程序设计的相关知识

    Python被视为一种面向对象的语言,在介绍Python类相关的内容前,本节对面向对象程序设计相关的概念进行简单介绍. 一.    类和对象(实例) 在面向对象的程序设计(OOP)过程中有两个重要概念 ...

  7. [.net 面向对象程序设计深入](1)UML——在Visual Studio 2013/2015中设计UML类图

    [.net 面向对象程序设计深入](1)UML——在Visual Studio 2013/2015中设计UML类图 1.UML简介 Unified Modeling Language (UML)又称统 ...

  8. [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类

    [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类 本节导读: 关于JSON序列化,不能 ...

  9. [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类

    [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类 本节导读:本节主要介绍通过序列 ...

随机推荐

  1. GTD:让大脑用来思考,而不是用来记事!

    前段时间听刘润大师分享了一套GTD时间管理方法理论,感觉非常受用!现拿来跟大家分享下,这套方法是刘润老师践行20多年总结提炼的精华,经亲自实践确实行之有效. 俗话说:工欲善其事,必先利其器!人生也是如 ...

  2. 手机端的viewport属性

    Window.devicePixelRatioThis read-only property returns the ratio of the resolution in physical pixel ...

  3. vgrant使用简易教程

    认识vagrant vagrant用于创建和部署虚拟化开发环境 避免了多次重新配置环境 节约了开发时间,同时可以体验不同的操作系统 对于新手也是一个不错的方式,当我们配置出错,直接删除重新安装即可 准 ...

  4. 关于html表格单元格宽度的计算规则

    * { margin: 0; padding: 0 } body { background: #fafafa } ul,li { list-style: none } h1 { margin: 20p ...

  5. ReentrantLock深入学习

    ReentrankLock  分为 非公平锁及公平锁 首先我们看一下它里面有哪些属性: private final Sync sync;Sync 这个类是 ReentrantLock的 一个静态内部类 ...

  6. (高级篇 Netty多协议开发和应用)第十章-Http协议开发应用(基于Netty的HttpServer和HttpClient的简单实现)

    1.HttpServer package nettyHttpTest; import io.netty.bootstrap.ServerBootstrap; import io.netty.chann ...

  7. (中级篇 NettyNIO编解码开发)第八章-Google Protobuf 编解码-2

    8.1.2    Protobuf编解码开发 Protobuf的类库使用比较简单,下面我们就通过对SubscrjbeReqProto进行编解码来介绍Protobuf的使用. 8-1    Protob ...

  8. 开涛spring3(6.7) - AOP 之 6.7 通知顺序

    如果我们有多个通知想要在同一连接点执行,那执行顺序如何确定呢?Spring AOP使用AspectJ的优先级规则来确定通知执行顺序.总共有两种情况:同一切面中通知执行顺序.不同切面中的通知执行顺序. ...

  9. 电商app开发新趋势!如何突显竞争力?

    2017年是电商变化最大的一年,同时,也是最多机遇的一年,更是电商最好的时代,如最近所看到的亚马逊的市值已经超过了美国8大零售商的总和,带领美国率先走向了新零售时代;马云也在做改变,试图与线下的大卖场 ...

  10. Redis大幅性能提升之Batch批量读写

    Redis大幅性能提升之Batch批量读写 提示:本文针对的是StackExchange.Redis 一.问题呈现 前段时间在开发的时候,遇到了redis批量读的问题,由于在StackExchange ...