python面向对象

来源:互联网 发布:罗马全面战争火攻算法 编辑:程序博客网 时间:2024/06/14 21:37

1。分类
- 面向过程编程:初学者容易接受,从上往下依次执行;
- 面向函数编程:将某功能的代码封装为一个函数,使用时仅调用函数;
(2+3)*2-1 jian(multi(add(2,3),2),1)

  • 面向对象编程:对函数进行分类和封装….
class people:               # 经典类class People(object):       # 新式类,object类是所有类的基类/父类    def __init__(self,name,age):    # 构造函数,当实例化对象时自动调用;        self.name = name            # 属性        self.age = age    def run(self):                  # 方法        print "running...."    def __del__(self):        print "deleteing......"     # 析构函数,删除实例化对象时自动调用;class Student(People):              # Student是子类,继承People这个父类;    passp1 = People("张策",18)p1.run()

这里写图片描述
这里写图片描述
2。面向对象的三个特性

a. 封装
封装:把内容统一放在一个地方,看成一个整体,(实例化对象self和类的属性绑定在一起);
- 访问封装内容的两种方式:
通过self去访问封装的内容;(self.name)
通过实例化的对象名去访问封装的内容;(p1 = People(“westos”,17) p1.age)
这里写图片描述
b. 继承
继承:子承父业
- 新名词:基类/派生类, 父类/子类, 新式类和经典类
- 多继承:
新式类: 广度优先继承;(python2.x和python3.x均支持)
经典类:深度优先继承;(python2.x支持,python3.x没有经典类)
- 注意:
类的方法中可以传递一个对象;

c. 多态
如果子类调用的方法,子类没有,父类有,运行父类;
如果子类调用的方法,子类有,父类也有,只运行子类的;
3. 面向对象进阶
- 类变量,全局变量,在内存中只存储一份;
- 普通的对象属性,每个对象中都需要存储一份;
这里写图片描述
这里写图片描述
4. 方法
- 实例化方法:第一个参数为self(实例化本身);
- 类方法:第一个参数是cls(类本身);通过@classmethod装饰器实现;
- 静态方法:第一个参数既不是self也不是cls;通过@staticmethod方法实现;
这里写图片描述
这里写图片描述
5. 特殊属性

#!/usr/bin/env python#coding:utf-8"""file:date,pydate:9/5/17 2:23 PMauthor:Hudesc:"""class DateTest(object):    def __init__(self,year=0,month=0,day=0):        self.year=year        self.month=month        self.day=day    def show_date(self):        return "Year:{}\nMonth:{}\nDay:{}".format(self.year,self.month,self.day)    @classmethod    def get_str_date(cls,s):        year,month,day=map(int,s.split("-"))        date1=cls(year,month,day)        return date1d=DateTest.get_str_date("2017-09-05")print d.show_date()

这里写图片描述

这里写图片描述
这里写图片描述
6. 类的特殊成员

#!/usr/bin/env python#coding:utf-8"""file:page,pydate:9/5/17 3:56 PMauthor:Hudesc:"""class Pager:    def __init__(self,require_page):        self.require_page=require_page        self.per_items=10    @property    def start(self):        val = ((self.require_page-1)*self.per_items)+1        return val    @property    def end(self):        val = (self.require_page)*self.per_items        return valp=Pager(2)print p.startprint p.end

这里写图片描述

这里写图片描述

原创粉丝点击