【廖雪峰老师python教程】——OOP

概述


  • 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
  • 数据封装、继承和多态是面向对象的三大特点,我们后面会详细讲解。
  • 由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的__init__方法,在创建实例的时候,就把name,score等属性绑上去:

类是创建实例的模板,而实例则是一个一个具体的对象,各个实例拥有的数据都互相独立,互不影响;

方法就是与实例绑定的函数,和普通函数不同,方法可以直接访问实例的数据;

通过在实例上调用方法,我们就直接操作了对象内部的数据,但无需知道方法内部的实现细节。

和静态语言不同,Python允许对实例变量绑定任何数据,也就是说,对于两个实例变量,虽然它们都是同一个类的不同实例,但拥有的变量名称都可能不同:

>>> bart = Student(‘Bart Simpson‘, 59)
>>> lisa = Student(‘Lisa Simpson‘, 87)
>>> bart.age = 8
>>> bart.age
8
>>> lisa.age
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: ‘Student‘ object has no attribute ‘age‘
  • 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问,所以,我们把Student类改一改:

    class Student(object):
    
        def __init__(self, name, score):
            self.__name = name
            self.__score = score
    
        def print_score(self):
            print(‘%s: %s‘ % (self.__name, self.__score))
    # 使用这种方法获得私有变量
    
    class Student(object):
        ...
    
        def get_name(self):
            return self.__name
    
        def get_score(self):
            return self.__score def set_score(self, score):
           self.__score = score

继承和多态


  • 便于同类事物之间传递关系
  • 当我们定义一个class的时候,我们实际上就定义了一种数据类型。我们定义的数据类型和Python自带的数据类型,比如str、list、dict没什么两样:【类就是一种数据类型】
  • 多态的理解:因为类也hi是以及个数据对象,如果定义一个函数输入参数是:类。那么其子类也可以被该函数调用,
  • 静态语言 vs 动态语言

    对于静态语言(例如Java)来说,如果需要传入Animal类型,则传入的对象必须是Animal类型或者它的子类,否则,将无法调用run()方法。

    对于Python这样的动态语言来说,则不一定需要传入Animal类型。我们只需要保证传入的对象有一个run()方法就可以了:

  • 小结

    继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写。

    动态语言的鸭子类型特点决定了继承不像静态语言那样是必须的。

获取对象信息


  • 我们来判断对象类型,使用type()函数:
  • 使用isinstance()
  • 如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list,比如,获得一个str对象的所有属性和方法:
  • 仅仅把属性和方法列出来是不够的,配合getattr()setattr()以及hasattr(),我们可以直接操作一个对象的状态:
  • 通过内置的一系列函数,我们可以对任意一个Python对象进行剖析,拿到其内部的数据。要注意的是,只有在不知道对象信息的时候,我们才会去获取对象信息。
  • 实例属性和类属性
>>> class Student(object):
...     name = ‘Student‘
...
>>> s = Student() # 创建实例s
>>> print(s.name) # 打印name属性,因为实例并没有name属性,所以会继续查找class的name属性
Student
>>> print(Student.name) # 打印类的name属性
Student
>>> s.name = ‘Michael‘ # 给实例绑定name属性
>>> print(s.name) # 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性
Michael
>>> print(Student.name) # 但是类属性并未消失,用Student.name仍然可以访问
Student
>>> del s.name # 如果删除实例的name属性
>>> print(s.name) # 再次调用s.name,由于实例的name属性没有找到,类的name属性就显示出来了
Student
# 学生成员计数器

class Student(object):
    count = 0

    def __init__(self, name):
        self.name = name
        Student.count += 1




【廖雪峰老师python教程】——OOP

原文地址:https://www.cnblogs.com/ChaoyuanJam/p/9741952.html

时间: 2024-08-03 01:23:36

【廖雪峰老师python教程】——OOP的相关文章

【廖雪峰老师python教程】——IO编程

同步IO 异步IO 最常见的IO--读写文件 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件). open() read() close() try: f = open('/path/to/file', 'r') print(f.read()) finally

【廖雪峰老师python教程】——进程与线程

多进程 操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒--这样反复执行下去.表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样. 对于操作系统来说,一个任务就是一个进程(Process) 在一个进程内部,要同时干多件事,就需要同时运行多个"子任务",我们把进程内的这些"子任务"称为线程(Thread). multiprocessing

廖雪峰老师Python教程读后笔记

廖老师网站:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 花几天时间看了廖老师的python教程,现在总结一下. (本人用python工作了一年半,有一定python基础,看过<python核心编程>与部分<python源码剖析>,只把自己觉得有用的记一下) 高级特性 切片,对list和tuple而言 生成器yield,协程用到,用于异步 迭代器Iterable(

进程 vs. 线程(python的协程)(转廖雪峰老师python教程)

我们介绍了多进程和多线程,这是实现多任务最常用的两种方式.现在,我们来讨论一下这两种方式的优缺点. 首先,要实现多任务,通常我们会设计Master-Worker模式,Master负责分配任务,Worker负责执行任务,因此,多任务环境下,通常是一个Master,多个Worker. 如果用多进程实现Master-Worker,主进程就是Master,其他进程就是Worker. 如果用多线程实现Master-Worker,主线程就是Master,其他线程就是Worker. 多进程模式最大的优点就是稳

git常用命令总结--廖雪峰老师Git教程命令总结

学习了廖雪峰老师的Git教程之后的命令总结,重点关于git和远程仓库的东西. 如果没有学过,这是传送门 下面这个图很重要 一.git初始化本地仓库和配置 echo "想输入到文件的内容,一般为# 库名字" >> README.md git init  初始化一个仓库 如果没有配置需要配置 git config --list git config --global user.email "[email protected]" git config --gl

廖雪峰的Python教程之第一个Python程序

一.命令行模式和Python交互模式的区分 命令行模式: Python交互模式 二.文本编辑器 1.绝对不能用Word和Windows自带的记事本.Word保存的不是纯文本文件,而记事本会自作聪明地在文件开始的地方加上几个特殊字符(UTF-8 BOM),结果会导致程序运行出现莫名其妙的错误.文本编辑器可用Notepad++.Sublime Text.EditPlus,个人用EditPlus比较多 2.注意print前面不要有任何空格. 3.用文本编辑器写Python程序,然后保存为后缀为.py的

asyncio创建协程解析——分析廖雪峰的Python教程之创建WEB服务(转)

第一步,搭建开发环境 所需第三方库: aiohttp,异步 Web 开发框架:jinja2,前端模板引擎:aiomysql,异步 mysql 数据库驱动 所需内置库: logging,系统日志:asyncio,异步IO:os,系统接口:json,json 编码解码模块:time,系统时间模块:datetime,日期模块 接下来仅对用到的功能进行讲解 第二步,构建 Web 框架 主要思路: 理解 asyncio.aiohttp 基本应用 使用 asyncio 异步 IO 模块创建服务协程,监听相应

git常用命令,参照廖雪峰老师的git教程

git的常用命令 写在开篇: 作为一个菜鸟,我想学习的最好的方式就是边学边记笔记,这里只是本人写的自己通过学习了廖雪峰老师的git教程之后自己做的笔记,个人理解,可能有失偏颇,如想学习更专业更权威的git知识,请移步廖雪峰老师的官网 一.创建git仓库 1.git init  在本地创建一个空的仓库 2.在远程创建一个项目仓库,gitHub内操作 git remote add origin ***** 通过这两个步骤,就将本地仓库与远程仓库关联起来,然后在本地coding,提交代码到远程.也可以

廖雪峰的Python3教程: 章节1,章节2,章节3

目录 廖雪峰的Python3教程: 章节1,章节2,章节3 1 python简介 2 安装Python 2-1 Python解释器 3 第一个Python程序 3-1 使用文本编辑器 3-2 Python代码运行助手 3-3 输入和输出 廖雪峰的Python3教程: 章节1,章节2,章节3 教程地址 1 python简介 Python是著名的"龟叔"Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言,解释型语言,高级语言. Python提供