python 中面向对象编程简单总结3--定制类
声明:资源来自慕课网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--定制类的更多相关文章
- python 中面向对象编程简单总结2
1.python中继承的特点: (1)总是从一个类继承,默认为object类 (2)不要忘记调用super.__init__方法来初始化父类的方法 def __init__(self,args): s ...
- python 中面向对象编程简单总结1
1.类的定义方式 class ClassName(object): #object 表示继承的类,默认为object pass 类的使用类似函数的调用,也可以认为是调用了一次模板来创建一个实例. 2. ...
- python 中面向对象编程的几个概念
Python super() 函数 super() 函数是用于调用父类(超类)的一个方法. super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会 ...
- Python:面向对象编程3 定制类(有更新)
Python:面向对象编程3 定制类(有更新) ⚠️本文主要内容为对Data model相关知识点的提取学习记录.(内容来自文档和部分网页教程案例) ⚠️:这个连接指向<流畅的python&g ...
- python基础-面向对象编程
一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...
- 可爱的 Python : Python中函数式编程,第一部分
英文原文:Charming Python: Functional programming in Python, Part 1 摘要:虽然人们总把Python当作过程化的,面向对象的语言,但是他实际上包 ...
- Python之面向对象编程学习
不知不觉,学到了python的面向对象编程思想.今天我们来讨论下面向对象编程的思想. 顾名思义,面向对象,就是面向于对象,这里所说的对象不是你现实生活中你的女朋友,你的老婆,你的爱人,在编程的世界里面 ...
- python基础——面向对象编程
python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...
- python的面向对象编程
面向对象编程是一种程序的范式,它把程序看成是对不同对象的相互调用,对现实世界建立的一种模型. 面向对象编程的基本思想,类和实例.类用于定义抽象对象,实例根据类的定义被创建出来. 在python当中我们 ...
随机推荐
- appium+python自动化34-获取元素属性get_attribute
获取text # coding:utf-8 from appium import webdriver from time import sleep desired_caps = { 'platform ...
- MySql For Windows解压缩版配置
#配置步骤 1.首先下载解压. (此处我解压到了我电脑的“E:\software\MySql”这个位置,下文以这个目录举例); 2.我的电脑右键属性,找到环境变量配置,配置环境变量,将mysql.ex ...
- Linux关闭iptables以及selinux
1.查看iptables状态 /etc/init.d/iptables status # 方法1 service iptables status # 方法2 2.重启后永久生效 chkconfig i ...
- Java中UTC时间转换
import java.text.SimpleDateFormat; import java.util.Date; import java util.Calendar; public class Te ...
- eclipse项目推送git
引用:http://blog.csdn.net/zongzhankui/article/details/48653731
- day-9心得
操作系统发展史 手工操作(无操作系统) 1946年第一台计算机诞生--20世纪50年代中期,还未出现操作系统,计算机工作采用手工操作方式. 手工操作程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入 ...
- leetcode419
public class Solution { public int CountBattleships(char[,] board) { );//3行 );//4列 ; ; i < row; i ...
- 查看DNS服务器
电脑右键查看本地连接 查看状态 然后看DNS
- 跟着太白老师学python day11 函数名的应用 globals(), locals()
1. 函数名就是内存地址 def func(): ') print(func) >>>> <function func at 0x00000000003DC1E0> ...
- KNN笔记
KNN笔记 先简单加载一下sklearn里的数据集,然后再来讲KNN. import numpy as np import matplotlib as mpl import matplotlib.py ...