声明:资源来自慕课网python学习课程,以下只是个人学习总结,仅供参考

1.Python类的特殊方法

  特征:以  __ 开头并结尾的方法,比如用于print的__str__() , __getattr__(),__setattr__()等

       不需要在代码中直接调用, Python的某些函数和操作符会自动调用。

     可以自己定制实现,如__str__()方法

class Person(object):
def __init__(self,name,gender):
self.name = name
self.gender = gender
def __str__(self):
return '(Person: %s , %s )' % (self.name,self.gender)
print Person("Roger","Male")

    python定义了__str__() 和 __repr__()两个方法,前者显示给用户, 后者显示给开发人员,所以如果在交互命令行下修改了__str__(),再调用的话可能会没有调用修改的,而是调用了__repr__()。也可以让两个方法相同: __repr__ = __str__

2.特殊的setter和getter

  在python中对应setter和getter可以由装饰器来写,从而使得调用的时候显得比较直接;当然,使用java中类似的方式也可以。由于python支持高阶函数,所以可以用装饰器把get/set方法装饰成属性。

class Student(object):
def __init__(self, name, score):
self.name = name
self.__score = score
@property #装饰get方法
def score(self):
return self.__score
@score.setter #装饰set方法,是@property装饰后的副产品
def score(self, score):
if score < 0 or score > 100:
raise ValueError('invalid score')
self.__score = score
#装饰之后,可以想使用属性一样设置score了
s = Student("Bob",59)
s.score = 60
print s.score
s.score = 1000
print s.score #会有异常,因为检查了score的范围

3.限制当前类所能拥有的属性: __slots__

class Student(object):
__slots__ = ('name', 'gender', 'score')
def __init__(self, name, gender, score):
self.name = name
self.gender = gender
self.score = score

4.可调用对象(对象也能调用)

  Python中函数是对象,称为可调用对象,一个类的实例也可以变成一个可调用对象,只需要实现一个特殊的方法  __call__()

class Person(object):
def __init__(self,name,gender):
self.name = name
self.gender = gender
def __call__(self, *args, **kwargs): #实现__call__方法让实例可被调用
print args
class Fib(object):
def __call__(self, num):
a, b, L = 0, 1, []
for n in range(num):
L.append(a)
a, b = b, a + b
return L
f = Fib()
print f(10)

python 中面向对象编程简单总结3--定制类的更多相关文章

  1. python 中面向对象编程简单总结2

    1.python中继承的特点: (1)总是从一个类继承,默认为object类 (2)不要忘记调用super.__init__方法来初始化父类的方法 def __init__(self,args): s ...

  2. python 中面向对象编程简单总结1

    1.类的定义方式 class ClassName(object): #object 表示继承的类,默认为object pass 类的使用类似函数的调用,也可以认为是调用了一次模板来创建一个实例. 2. ...

  3. python 中面向对象编程的几个概念

    Python super() 函数 super() 函数是用于调用父类(超类)的一个方法. super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会 ...

  4. Python:面向对象编程3 定制类(有更新)

    Python:面向对象编程3  定制类(有更新) ⚠️本文主要内容为对Data model相关知识点的提取学习记录.(内容来自文档和部分网页教程案例) ⚠️:这个连接指向<流畅的python&g ...

  5. python基础-面向对象编程

    一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...

  6. 可爱的 Python : Python中函数式编程,第一部分

    英文原文:Charming Python: Functional programming in Python, Part 1 摘要:虽然人们总把Python当作过程化的,面向对象的语言,但是他实际上包 ...

  7. Python之面向对象编程学习

    不知不觉,学到了python的面向对象编程思想.今天我们来讨论下面向对象编程的思想. 顾名思义,面向对象,就是面向于对象,这里所说的对象不是你现实生活中你的女朋友,你的老婆,你的爱人,在编程的世界里面 ...

  8. python基础——面向对象编程

    python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  9. python的面向对象编程

    面向对象编程是一种程序的范式,它把程序看成是对不同对象的相互调用,对现实世界建立的一种模型. 面向对象编程的基本思想,类和实例.类用于定义抽象对象,实例根据类的定义被创建出来. 在python当中我们 ...

随机推荐

  1. HDU 1222 Wolf and Rabbit(欧几里得)

    Wolf and Rabbit Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  2. webView放弃capture()截图的替代方法

    float scale = webView.getScale(); height = (int) (webView.getContentHeight() * scale + 0.5); bitmap ...

  3. CentOS6.4的NIS+NFS配置流程

    NIS和NFS的架设请看我其他的专题日志,这边主要描述两者结合的命令流程 1.NFS上配置专门给NIS用户共享目录 /nishome/ 192.168.188.0/24(rw,sync,no_root ...

  4. linux下thinkphp取消调试模式后找不到网页解决方案

    1.最大嫌疑是Runtime目录权限不足,导致common~runtime.php文件无法生成, 解决:1.整个Runtime目录删除,让系统重新生成; 2.给Runtime及以下的所有文件足够权限0 ...

  5. MySQL添加数据库的唯一索引的几种方式~

    创建表时直接设置: DROP TABLE IF EXISTS `student`;CREATE TABLE `student` (  `stu_id` int(11) NOT NULL AUTO_IN ...

  6. Windows7下搭建Python2.7环境

    机器: Windows7_x86_64 步骤: 1.下载Python2.7 下载地址:https://www.python.org/downloads/ 2.安装Python2.7 双击安装包,安装过 ...

  7. 安装git之后,桌面图标出现很多的蓝色问号

    今天在搞git之后,开机发现多了好多的问号: 这是因为我们在桌面创建了版本库了. 这个时候我们在系统中吧隐藏的文件夹显示出来.这个时候会看到桌面上有一个隐藏的git文件夹.把这个文件夹删除掉之后,刷新 ...

  8. IDA Pro 权威指南学习笔记(十四) - 操纵函数

    IDA 无法定位一个函数调用,由于没有直接的方法到达函数,IDA 将无法识别它们 IDA 可能无法正确确定函数的结束部分,需要手动干预,以更正反汇编代码中的错误 如果编译器已经将函数分割到几个地址范围 ...

  9. Nginx not running with no error message

    Nginx not running with no error message #!/bin/shecho "start"rm /etc/nginx/sites-enabled/d ...

  10. 第十章 消息驱动的微服务: Spring Cloud Stream

    Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力的框架. 它可以基于Spring Boot 来创建独立的. 可用于生产的 Spring 应用程序. 它通过使用 Sprin ...