Python——面向对象
一、创建类
语法格式:
class 类名:
pass
创建方法:
1 构造方法
class Person:
def __init__(self, name,age):
#构造方法,构造方法的特性, 类名() 自动执行构造方法
self.n = name
self.a = age
执行构造方法:
obj = Person('李欢', 18)
2 普通方法:
class Person:
def show(self):
pass
执行普通方法:
obj = Person()
obj.show()
二、封装
self代指obj,指调用方法的调用者
class Bar:
def __init__(self, n,a):
self.name = n
self.age = a
self.xue = 'o' obj1 = Bar('alex', 123) obj2 = Bar('eric', 456)
三、继承
继承格式:
class 父类: #基类
pass class 子类(父类): #派生类
pass
重写父类方法后,希望执行父类方法和重写后的方法。
方法一: super(子类, self).父类中的方法(...)
方法二: 父类名.父类中的方法(self,...)
class f:
def eat(self):
print('Eating') def sleep(self):
print('f is sleeping') class s(f): #在括号中加入要继承的父类
def sleep(self): #重写父类方法
super(s,self).sleep() #方法一
print('s is sleeping')
f.sleep(self) #方法二 obj = s()
obj.sleep()
obj.eat()
支持多继承
多继承特点:
a. 左侧优先
b. 一条道走到黑
c. 同一个根时,根最后执行
class BaseReuqest:
def __init__(self):
print('BaseReuqest.init')
class RequestHandler(BaseReuqest):
def __init__(self):
print('RequestHandler.init')
BaseReuqest.__init__(self)
def serve_forever(self):
# self,是obj
print('RequestHandler.serve_forever')
self.process_request()
def process_request(self):
print('RequestHandler.process_request')
class Minx:
def process_request(self):
print('minx.process_request')
class Son(Minx, RequestHandler): #按照从左到右,一条线走到底,如果有相同的根,则根最后执行
pass
obj = Son() # init
obj.serve_forever()
obj = Son进行实例化时,先自动执行init方法,Son类中没有init,则在第一个父类中找init方法,Minx中没有init,去第二个父类中找init方法,以此执行完init方法之后,再去调用server_forever()普通方法。
四、类成员
字段
- 静态字段
静态字段保存在类,可以通过对象访问,也可以通过类访问。
- 普通字段
普通字段保存在对象中,只能通过对象访问。
例:
class Province:
country = 'China' #静态字段
def __init__(self,name):
self.name = name #普通字段 obj = Province('beijing')
print(obj.name)
print(Province.country)
方法
- 普通方法
普通方法保存在类中,由对象来调用。self表示对象
- 静态方法
静态方法保存在类中,由类直接调用
- 类方法
类方法保存在类中,由类直接调用,cls代指当前类
例:
class foo:
def bar(self): #普通方法,self是对象
print('ok')
@staticmethod #静态方法
def sta():
print('')
@staticmethod #静态方法
def stat(a,b):
print(a,b)
@classmethod #类方法
def aaa(cls): #cls是类名
print('class method')
obj = foo()
obj.bar()
foo.sta()
foo.stat(1,2)
foo.aaa()
不伦不类——属性
通过加装饰器,以另一种形式访问对应的方法。
class foo:
@property #用于执行obj.bar
def bar(self):
print('')
return 666 @bar.setter #用于执行obj.bar = 123
def bar(self,val):
print(val) @bar.deleter #通过del obj.bar可以定位并访问下面的方法
def bar(self):
print(999) obj = foo()
obj.bar
obj.bar = 123
del obj.bar
实例:
实现分页
class Pagenation:
def __init__(self,current_page):
try:
p = int(current_page)
except Exception as e:
p = 1
self.page = p
@property
def start(self):
val = (self.page - 1) * 10
return val
@property
def end(self):
val = self.page * 10
return val
li = []
for i in range(5000):
li.append(i)
while True:
page = input('>>>')
obj = Pagenation(page)
# print(li[obj.start() : obj.end()])
print(li[obj.start:obj.end]) #在方法前加装饰器后,可以直接用 对象名.方法名 访问方法。
Python——面向对象的更多相关文章
- python 面向对象初级篇
Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...
- Python 面向对象 基础
编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...
- python面向对象进阶(八)
上一篇<Python 面向对象初级(七)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python 面向对象(进阶篇)
上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python 面向对象编程学习
1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...
- Python面向对象详解
Python面向对象的"怜人之处" Python的待客之道--谁能进来 Python的封装--只给你想要的 Python的继承--到处认干爹 Python的多态--说是就是
- python 面向对象和类成员和异常处理
python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...
- python 面向对象学习
------Python面向对象初 下面写一个类的简单实用,以便方便理解类 #python 3.5环境,解释器在linux需要改变 #阅读手册查询readme文件 #作者:S12-陈金彭 class ...
- 初识python面向对象
一.初识python面向对象: class Person: #使用class关键字定义一个类 age=0 #类变量(静态变量) def eat(self,food): #定义一个方法 self.age ...
- python 面向对象、特殊方法与多范式、对象的属性及与其他语言的差异
1.python 面向对象 文章内容摘自:http://www.cnblogs.com/vamei/archive/2012/06/02/2532018.html 1.__init__() 创建对 ...
随机推荐
- 支付宝即时到账API,网站收到回调页面,输出验证失败,log中responseTxt=错误的问题
看了网上无外乎这三种原因导致: 1.参数编码问题 2.参数多余问题 3.网络延时问题 以上三种可以参考这个网站给出的解决办法:http://blog.csdn.net/zj53hao/article/ ...
- 使用crosswalk优化ionic2应用包
ionic plugin add cordova-plugin-crosswalk-webview --save
- HTML DOM对象之createElement()方法
今天在学习DOM节点操作时,发现了创建DOM节点的createElement()方法的一个有意思的现象. 代码如下: var box=document.getElementById("box ...
- hdu 2062
ps:11版的最后一题...是个递推题...比如n=5,推出首数字后,n--,继续找下一个 代码: #include "stdio.h" ]; ]; int main(){ lon ...
- 3dsMax用到的网格优化
3dsMax软件主要是用于建模的,里面有一个网格优化的功能,它的网格优化的过程是基于那个网格简化算法,经过使用个人认为是基于几何删除的折叠方式来进行的,可能是边折叠或者三角折叠的方式,还望大神多多指教 ...
- 怎么在excel中快速查找重复记录
假设数字在A列,数字从A1开始:方法一:辅助列中输入公式,数据重复时会出现“重复”提示.=IF(COUNTIF(A:A,A1)>1,"重复","") ,下 ...
- pip 下载慢
经常在使用Python的时候需要安装各种模块,而pip是很强大的模块安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以我们最好是将自己使用的pip源更换一下,这样就能解决被墙导致的装不上库的 ...
- MVC OF UEditor 图片上传- 额外参数 笔记
最近正巧需要用到UEditor ,因为需求,.需要把上传的图片数据上传到阿里云的OSS与记录图片相关信息到MS SQL中 . 不得已只能翻UEditor的实现代码>_<痛苦. 备忘笔记: ...
- [转载 ]POJ 1273 最大流模板
转载 百度文库花了5分下的 不过确实是自己需要的东西经典的最大流题POJ1273 ——其他练习题 POJ3436 . 题意描述: 现在有m个池塘(从1到m开始编号,1为源点,m为汇点),及n条水渠,给 ...
- js 关键字和保留字
不能把关键字.保留字.true.false和null用作标识符. js中的关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等.按照规则,关键字也是语言保留的,不能用作标识符.以下就是ECMA ...