Python 学习7

思维导图

这里写图片描述

python面向对象编程

Python编程分类:

  • 面向过程编程:初学者容易接受,从上往下依次执行;
  • 面向函数编程:将某功能的代码封装为一个函数,使用时仅调用函数;
    例如: 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这个父类;
    pass



p1 = People("li",18)
p1.run()

面向对象的三个特性

封装

封装:把内容统一放在一个地方,看成一个整体,(实例化对象self和类的属性绑定在一起);
- 访问封装内容的两种方式:
通过self去访问封装的内容;(self.name)
通过实例化的对象名去访问封装的内容;(p1 = People(“westos”,17) p1.age)

继承

继承:子承父业
- 新名词:基类/派生类, 父类/子类, 新式类和经典类
- 多继承:
新式类: 广度优先继承;(python2.x和python3.x均支持)
经典类:深度优先继承;(python2.x支持,python3.x没有经典类)
- 注意:
类的方法中可以传递一个对象;

多态

  • 如果子类调用的方法,子类没有,父类有,运行父类;
  • 如果子类调用的方法,子类有,父类也有,只运行子类的;

总结

  • 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用
  • 类 是一个模板,模板中包装了多个“函数”供使用
  • 对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数
  • 面向对象三大特性:封装、继承和多态

面向对象进阶

  • 类变量,全局变量,在内存中只存储一份;
  • 普通的对象属性,每个对象中都需要存储一份;

方法

  • 实例化方法:第一个参数为self(实例化本身);
  • 类方法:第一个参数是cls(类本身);通过@classmethod装饰器实现;
  • 静态方法:第一个参数既不是self也不是cls;通过@staticmethod方法实现;

特殊属性

class Pager:        # 经典类
    def __init__(self, request_page):
        self.request_page = request_page
         self.per_items = 10

     @property
     def start(self):
         val = ((self.request_page - 1) * self.per_items) + 1
         return val

     @property
     def end(self):
         val = self.request_page * self.per_items
         return val
p = Pager(2)
print p.start
print p.end

输出结果和我们实体化后代码print p.start()是一样的,给我们的感觉只是少了函数的括号而言

我们再看下面代码

class Goods(object):
     def __init__(self):
         self.old_price = 100
         self.discount = 0.7

     @property
     def price(self):
         new_price = self.old_price * self.discount
         return new_price

     @price.setter
     def price(self, value):
         self.old_price = value

     @price.deleter
     def price(self):
         del self.old_price


 g = Goods()
 print g.price
 g.price = 200
 print  g.price

结果为

70.0
140.0

可以看到,在函数前面加入相应属性,函数名相同也可以正确调用

类的特殊成员

__doc__ 查看尖的描述信息

__module__表示当前操作的对象所在的模块

__class__表示当前操作的对象所属的类

__init__构造方法 通过类创建对象自动执行

__del__析构方法,当前对象在内存中被释放自动斩妖执行

__call__对象后面加括号触发执行

__dict__查看类或对象中的成员

__str__如果一个类中定义了此方法,那么打印此类对象时,输出此方法的返回值

__getitem__当类中定义了一个字典的属性成员,可以获取

__setitem__设置修改类中字典的数据

__delitem__删除 类中字典的数据

__metalass__其用来表示该类由 谁 来实例化创建

__new__触发 __init__创建实例
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值