Python opp知识整理

本知识点参考廖雪峰的Python课程 [https://www.liaoxuefeng.com]

感谢北京图灵知非的免费课程 [http://www.tulingxueyuan.com/]

2018/6/25 星期一 9:56:21

Python面向对象编程--01

面向对象的概念

  • 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
  • 在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义对象的数据类型就是面向对象中类(Class)的概念
  • 假如我们打印学生的成绩表
    • 面向过程会这样实现,我们程序的执行流程是:

      std1 ={‘name‘:‘yang‘,‘score‘:99}
      std2 = {‘name‘:‘wen‘,‘score‘:99}
      def print_score(std):
          print(‘{0}:{1}‘.format(std[‘name‘],std[‘score‘]))
  • 如果采用面向对象的设计思想。Student应该是一个对象,这个对象拥有name和score这两个属性,如果打印出学生的成绩,必须有student,然后才能把成绩打印出来:
        class Student(object):
        def __init__(self,name,score):
            self.name = name
            self.score = score
        def print_score(self):
            print(‘{0}:{1}‘.format(self.name,self.score))
  • 给对象发消息实际上就是调用对象的相关函数,我们成为对象的方法:
        yang = Student(‘yangaoteng‘,100)
        wen = Student(‘wangwenwen‘,99)
        yang.print_score()
        wen.print_score()
  • 小结:
    • 面向对象是一种常见的思想,比方说数学公式就是众多经验统计出来的结果。比方说 动物、植物、都相当于类的概念
    • 在Python中,所有数据类型都可以视为对象。
    • 我们用 class创建类
    • init,相当于构造函数,就是函数必须输入的值。

类和实例

  • 面向对象最重要的两个概念就是 类(class)和 实例(Instance),类是抽象的模板(好比数学公式),而实例是根据类创建出来的’对象‘(好比用数学公式解出来的题)
  • 还以上面的例子,在Python中,定义类通过class关键字:
        class Student(object):
            pass
  • class后面跟着的是类名,Student,类名大写字符开头,后面紧跟着(object),这表示这个类来自哪里,括号里面的object可以不写
  • 定义好了Student类,可以创建出Student的实例,创建实例通过类名+()现实:
        yang = Student()
  • 这时候可以自由的给一个实例绑定属性
        yang.name = ‘yangaoteng‘
        yang.score = 1000
  • 由于类有的时候会起到模板的作用,我们可以在创建实例的时候,把我们一些任务必须绑定的属性填写进去。我们可以通过一个特殊的 __ init __(前后个有两个_),在创建实例的时候,就可以把 name , score 等属性绑定上去:
        class Student():
            def __init__(self,name,score):
                self.name = name
                self.score = score
  • __ init __ 方法的第一个参数永远是self,self表示创建的实例本身
  • 有了__ init__ 方法,在创建实例的时候,就不能传入空的函数了,必须传入与__ init __ 方法匹配的参数,但self不需要传,Python解释器会自动上传进去。
        >>> yang = Student(‘yangaoteng‘,100)
        >>> yang.name
        ’yangaoteng‘
        >>> yang.score
        59
  • 做到这里我们就可以搞事情了,我们可以对数据进行分类,大于90分的成绩为’A‘....,进行男女的分类。等等,对数据进行处理
    # 创建一个实例,对男女进行分类,对‘成绩进行分类’
    class Student():
        def __init__(self,name,score,sex):
            self.name = name
            self.score = score
            self.sex = sex
        def Student_score(self):
            a=‘男‘
            if self.sex ==‘男‘:
                a= ‘男‘
            elif self.sex == ‘女‘:
                a= ‘女‘
            if self.score >=80:
                print(‘姓名{0},性别{1},成绩A‘.format(self.name,a))
    
            elif self.score >=60:
                print(‘姓名{0},性别{1},成绩B‘.format(self.name,a))
    
            elif self.score >=0:
                print(‘姓名{0},性别{1},成绩C‘.format(self.name,a))
            else:
                print(‘666‘)

访问限制

  • 在class内部,有属性有方法有方法,外部代码可以直接调用实例变量的方法来进行操作,这样,就隐藏了内部的复杂逻辑。
  • 但是,从前面的Student类的定义看,外部代码还是可以自由的修改实际的namescore属性:
        >>> yang = Student(‘yangaoteng‘,100,‘男‘)
        >>> yang.score
        100
        >>> yang.score=0
        >>> yang.score
        0
  • 这样我的成绩就被改变成了0分,显然是不可能的。如果想让内部属性不被外部访问,可以在属性名称前面加上两个下划线 __,在Python中,实例的变量如果以__开头,就是私有变量(private),只有内部可以访问,外部不可以访问。
        class Student(object):
        def __init__(self,name,score):
            self.__name = name
            self.__score = score
        def print_score(self):
            print(‘{0}:{1}‘.format(self.__name,self.__score))
  • 改变完成之后,就无法通过外部访问了
        >>> yang = Student(‘yangaoteng‘,100,‘男‘)
        >>> yang._name
        Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
        AttributeError: ‘Student‘ object has no attribute ‘__name
  • 这样参数被隐藏了,我们无法在内部进行访问,我们就可以更好的处理数据。
        #
        class Student():
            def __init__(self, name, score):
                self.__name = name
                self.__score = score
    
            def get_name(self):
                return self.__name
    
            def get_score(self):
                return self.__score
    
            def set_name(self,name):
                self.__name = name
    
            def set_score(self,score):
                if 0<=score<=100:
                    self.__score = score
                else:
                    raise ValueError("数值不规范,请输入(0-100)的数字")
    
            def print_score(self):
                print("{0}:{1}" % (self.__name, self.__score))


Python opp知识整理

原文地址:https://www.cnblogs.com/yangaoteng666/p/9224486.html

时间: 2024-11-11 11:57:13

Python opp知识整理的相关文章

Python 基础知识整理-2

条件语句 if else 循环语句 while for 循环之break  continue  break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归完,也会停止执行循环语句. break语句用在while和for循环中. continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环. continue语句用在while和for循环中.  pass是空语句,是为了保持程序结构的完整性:不做任何事情,一般用做占位语句. 原文地址:https:

Python 基础知识整理-1

数据类型 Numbers(数字)  int -有符号整型 / long-长整型 / float-浮点型 /  complex-复数 String(字符串) List(列表)  [] Tuple(元组) () Dictionary(字典) {} 数据类型转换 数字:int(x),long(x),float(x),complex(x) 字符串:str(x):x 转换为字符串  repr() :x 转换为表达式字符串 对象:eval(str):用来计算在字符串中的有效Python表达式,并返回一个对象

python基础知识整理

1 逻辑运算 and,or, not (1)在没有()的情况下not 优先级高于 and,and优先级高于or,即优先级关系为( )>not>and>or,同一优先级从左往右计算. (2)计算下面例题的运算结果 1 3>4 or 4<3 and 1==1 #False 2 1 < 2 and 3 < 4 or 1>2 #True 3 2 > 1 and 3 < 4 or 4 > 5 and 2 < 1# True 4 1 > 2

python基础知识整理自用

list=[x**2 for x in range(10)] L=[1,2,3,4] def f(x): return (x**2) r=map(f,L) 原文地址:https://www.cnblogs.com/ysmdbk/p/8331049.html

Python介绍与特点(自学python知识整理)

Python 简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计: Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节.类似于PHP和Perl语言. Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序. Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术. Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语

python day04 学习整理

python day4 学习整理 1.装饰器 #什么是装饰器#器是指函数#装饰就是修饰,意思是为其他函数添加新功能#装饰器定义:本质就是函数,定义是为其他函数添加新功能 ##装饰器需要遵循的原则#1,不修改被装饰函数的源代码(开放封闭原则)#2,为被装饰函数添加新功能后,不修改被装饰函数的调用方式 #实现装饰器的知识储备#装饰器 = 高阶函数 + 函数嵌套 + 闭包 # def foo(x):# def foo1(x):# return x# return foo1## print(foo(1)

计算机硬件知识整理

计算机硬件知识整理 一.编程语言的作用 编程语言,就是让计算机为解决某个问题,而使用某种程序设计语言编写程序代码,并最终得到相应结果的过程.为了使计算机能够理解人的意图,人类就必须将需解决的问题的思路通过计算机能够理解的形式告诉计算机,这种人和计算机之间交流的过程就是编程. 目前的主要编程语言有,Java, C, C++, Python, PHP, Pearl等. 二. 编程语言的作用及与操作系统和硬件的关系 操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件的计

MYSQL数据库常用知识整理

Evernote Export MYSQL数据库常用知识整理 什么是MYSQL MYSQL的特性 MYSQL存储引擎的分类以及数据文件的介绍 MYSQL赋权 MYSQL备份与恢复 MYSQL的基本操作:增删查改 MYSQL的基本故障判断与处理 MYSQL的调优 MYSQL主主.主从复制的实现 MYSQL大数据备份和恢复 数据文件的损坏与修复 什么是MYSQL MySQL 是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司.目前MySQL被广泛地应用在Internet上的中

Python基础知识-5

python其他知识目录 打印0-5之间的偶数for i in range(0,5,2): print(i)for i in range(0,5): if i%2==0: print(i)------------结果:024 # 11.利用for循环和range找出 0 ~ 100 以内所有的偶数,并追加到一个列表.li=[]for i in range(0,101): if i%2==0: li.append(i)print(li) ----如有变量 googs = ['汽车','飞机','火