python 面向对象相对别的语言来说缺少两个功能:

1、python不具备重载,重载是指在同一个类中,使得方法有相同的名称,但是有不同的参数列表,但由于python函数具有强大的参数处理功能,因此这不是一个问题。

2、python不存在强制数据隐私的机制,不过若想创建属性(实例变量或方法)时在属性名前以两个下划线引导,python就会阻止无心的访问,因此可以认为是私有的。

如果一个方法是预定义的特殊方法,则应该在方法名前后加上双下划线,例如__sub__()和__add__()。

一、自定义类

1、方法一

class className:

suite

2、方法二

class className(base_class):

suite

二、属性与方法

import math

class Point(object):

def __init__(self,x,y):

self.x = x

self.y = y

def __eq__(self,other):

return self.x == other.x and self.x == other.y

def distance_from_origin(self):

return math.hypot(self.x,self.y)

def __str__(self):

return '({0.x},{0.y})'.format(self)

a = Point(1,2)

b = Point(2,2)

b.distance_from_origin()

Point.distance_from_origin(b)

a == b

str(a)

可预定义的比较方法如下:

默认情况下,自定义类的所有实例都是可哈希运算的,因此,可对其调用hash(),也可以将其作为字典的键,或存储在集合中。但是如果重新实现了__eq__(),实例就不再是可哈希运算的了。

为了避免不适当的比较,可以使用如下三种方法:

使用断言

assert isintance(object,Class),'object is not in the Class'

产生TypeError异常

if not isinstance(object,Class):

raise TypeError('object is not in the Class')

返回NotImplemented

if not isinstance(object,Class):

return NotImplement-ented

如果返回了NotImplemented,Python就会尝试调用other.__eq__(self)来查看object是否支持与Class类的比较,如果也没有类似的方法,Python将放弃搜索,并产生TypeError异常。

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

使用super()

使用super()函数可以使用基类的方法

def __init__(self,x,y,radius):

super().__init__(x,y)

self.radius = radius

在使用super()时,可以不用写self参数。

使用特性进行属性存取控制

一些方法返回一个单独的值,从用户的角度讲,可以将方法可以当做数据属性使用。以下是一个实例

class Circle(object):

def __init__(self,radius):

self.radius = radius

def area(self):

return self.radius * 2

area = property(area)

c = Circle(4)

c.area

或可写为

class Circle(object):

def __init__(self,radius):

self.radius = radius

@property

def area(self):

return self.radius * 2

c = Circle(4)

c.area

提供了一种验证数据有效性的方法

class Circle(object):

def __init__(self,x,y,radius):

self.radius = radius

self.x = x

self.y = y

def area(self):

return self.radius * 2

area = property(area)

@property

def radius(self):

return self.__radius

@radius.setter

def radius(self,radius):

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

self.__radius = radius

c = Circle(1,-2,4)

c.area

希望与广大网友互动??

点此进行留言吧!

python类定义的讲解_python面向对象、自定义类等使用实例讲解相关推荐

  1. python中的类属性和类方法_Python 面向对象,类的属性和 类的方法

    面向对象,类的属性和 类的方法 面向对象 类和对象 Python类定义 类属性 类方法 面向过程和面向对象 面向过程 和 面向对象 编程 面向过程 编程:函数式编程,C程序,shell等 面向对象 编 ...

  2. python数据库连接类写其他类调用报超时_python面向对象,类,以及连接数据库

    ## 面向对象 ### 1.面向对象三大特性: 封装,继承,多态 ### 1.1.封装 1.在类中对数据的赋值.内部调用对外部用户是透明的 2.这使类变成了一个胶囊或容器,里面包含着类的数据和方法 3 ...

  3. python怎么定义正方形函数_python – Matplotlib自定义图例以显示正方形而不是矩形...

    这是我尝试将条形图的图例从矩形更改为方形: import matplotlib.patches as patches rect1 = patches.Rectangle((0,0),1,1,facec ...

  4. python中readlines函数例子_Python遍历方法readline()和readlines()实例讲解

    在进行Python项目开发(http://www.maiziedu.com/course/python/)中我们需要遍历一个大日志文件,在这个时候我们应该使用readlines()还是readline ...

  5. 用python倒序输出一个字符串_Python字符串逆序输出的实例讲解

    1.有时候我们可能想让字符串倒序输出,下面给出几种方法 方法一:通过索引的方法 >>> strA = "abcdegfgijlk" >>> st ...

  6. python数组赋值_对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解

    对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解 列表赋值: >>> a = [1, 2, 3] >>> b = a >>> print ...

  7. python定义一个类和子类_Python面向对象class类属性及子类用法分析

    本文实例讲述了Python面向对象class类属性及子类用法.分享给大家供大家参考,具体如下: class类属性 class Foo(object): x=1.5 foo=Foo() print fo ...

  8. python类定义中、对象字符串的特殊方法是_python中自定义类对象json字符串化的方法_python json转字符串、...

    python中自定义类对象json字符串化的方法 1. 用 json 或者simplejson 就可以 2.定义转换函数: def convert_to_builtin_type(obj): prin ...

  9. python编程语言继承_Python面向对象程序设计类的封装与继承用法示例

    本文实例讲述了Python面向对象程序设计类的封装与继承用法.分享给大家供大家参考,具体如下: 访问限制(封装) 1.概念 面向对象语言的三大特征:封装, 继承, 多态. 广义的封装: 类和函数的定义 ...

最新文章

  1. mdk编译后的HTML,[转载]keil MDK编译完成后,Program Size:
  2. 将项目依赖也打到jar包中
  3. Host 'xxx' is not allowed to connect to this MySQL server.
  4. 学习Ruby的10条理由
  5. 一起玩转LiteOS组件:Pixman
  6. 2017.10.8 球形空间产生器sphere 思考记录
  7. React Echarts 点击事件
  8. 【解决方案】GB28181/RTSP/Onvif/HikSDK/Ehome协议视频共享平台EasyCVR人脸识别助力打造智慧安检
  9. SAO代码解析补充(二)
  10. java数组三种排序方式
  11. JavaScript留言板效果代码实例
  12. VMware Tools手动安装
  13. linux命令清理磁盘空间,Unix/Linux中常用的清理磁盘空间的命令
  14. 用来处理gwdac网站爬取的实验数据的python代码
  15. [FROM WOJ]#4317 谈笑风生
  16. Linux 灾难恢复
  17. 李白号称诗仙,为何七律连有些二流诗人都敌不过?
  18. DTO DAO VO BO PO POJO区别
  19. 郑军科幻小说《冰与血》《海与人》
  20. 盖茨开始闭关修炼 冥思微软之大未来

热门文章

  1. Linux Shell脚本专栏_服务器系统配置初始化脚本_01
  2. linux CentOS7最小化安装环境静默安装Oracle11GR2数据库(安装常用工具_02)
  3. 第3篇:Flowable-IDM详述
  4. MyBatis-Plus_Condition作用
  5. Nginx相关 解决nginx反向代理后页面上的js/css文件无法加载
  6. Python 浅拷贝和深拷贝 - Python零基础入门教程
  7. 置顶图片代码加链接html,css图片怎么加链接?
  8. 查找单链表的倒数第k个节点,要求只能遍历一次链表(C语言)
  9. 如何在php中插入数据并修改,php怎么同时向2张表里插入数据
  10. python怎样导入scrapy_(Python)在导入的模块scrapy中找不到任何项目