Python笔记5#面向对象编程OOP

▲面向对象编程OOP

Object Oriented Programming。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。

面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。

而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。

在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。

▲类和实例

类Class是实例Instance的模板。实例是根据类创建的一个个具体的对象。

在Python中,定义类通过class关键字实现。创建实例,通过类名+()实现。示例代码如下:

#定义一个继承object的Student类
class Student(object):

#__init__方法可以把name,score属性强制绑定到self,self指向创建实例的本身
    def __init__(self, name, score):
        self.name = name
        self.score = score

#封装print_score方法,类的方法第一个参数必须是self,实例调用时不用传递
    def print_score(self):
        print(‘%s : %s‘ % (self.name, self.score))

    def get_grade(self):
        if self.score > 90:
            print(‘A‘)
        elif self.score > 60:
            print(‘B‘)
        else:
            print(‘C‘)

#创建一个实例,传入与__init__匹配的参数,self不用传递
michael = Student(‘maciael jackson‘, 92)

michael.print_score()
michael.get_grade()

示例代码运行结果:

maciael jackson : 92
A

 

▲访问限制

如果让类的内部属性不被外部访问,可以再属性的名字前加两个_。以__开头命名的属性在python中称为私有变量private。私有变量只有内部可以访问,外部不可访问。这样通过访问限制的保护,代码更加健壮。

如果要允许外部代码访问和修改私有变量的话,可以在类的定义中给私有变量(属性)增加get()和set()方法。

 

▲继承和多态

定义一个类Animal,再定义一个类Dog继承自Animal。那么Dog就是子类subClass,Animal就是父类或基类baseClass。

当两个类存在继承关系时,子类就获得了父类的全部方法。同时子类可以新增自己的方法,也可以重写父类的方法。这就是多态。

当我们定义一个class时,其实我们就是定义一种数据类型。可以用isinstance()判断某个对象是否是这个类型。

示例代码如下:

#定义一个继承object的类Animal
class Animal(object):
    def run(self):
        print(‘Animal is running!‘)

#定义一个类Animal的子类Dog
class Dog(Animal):

#重写父类的run()方法
    def run(self):
        print(‘Dog is running!‘)

#增加eat()方法
    def eat(self):
        print(‘Dog is eating!‘)

#创建一个Animal的实例dog1
dog1 = Animal()
dog1.run()
#创建一个Dog的实例dog2
dog2 = Dog()
dog2.run()

print(isinstance(dog1, Animal))
print(isinstance(dog1, Dog))
print(isinstance(dog2, Animal))
print(isinstance(dog2, Dog))

#多态
def run_again(animal):
    animal.run()

run_again(dog1)
run_again(dog2)

运行结果:

Animal is running!
Dog is running!
True
False
True
True
Animal is running!
Dog is running!

▲获取对象信息

type()用来判断对象类型,返回type类型

isinstance()用来判断是否是某类型,返回boolean值

dir()获取对象的所有属性和方法,返回一个list

hasattr(), getattr(), setattr()可以直接操作一个对象的状态

示例代码如下:

>>> isinstance(‘abc‘, str)
True
>>> type(‘abc‘)
<class ‘str‘>
>>> dir(‘abc‘)
[‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__getnewargs__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__mod__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__rmod__‘, ‘__rmul__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘capitalize‘, ‘casefold‘, ‘center‘, ‘count‘, ‘encode‘, ‘endswith‘, ‘expandtabs‘, ‘find‘, ‘format‘, ‘format_map‘, ‘index‘, ‘isalnum‘, ‘isalpha‘, ‘isd
ecimal‘, ‘isdigit‘, ‘isidentifier‘, ‘islower‘, ‘isnumeric‘, ‘isprintable‘, ‘isspace‘, ‘istitle‘, ‘isupper‘, ‘join‘, ‘ljust‘, ‘lower‘, ‘lstrip‘, ‘maketrans‘, ‘partition‘, ‘replace‘, ‘rfind‘, ‘rindex‘, ‘rjust‘, ‘rpartition‘, ‘rsplit‘, ‘rstrip‘, ‘split‘, ‘splitlines‘, ‘startswith‘, ‘strip‘, ‘swapcase‘, ‘title‘, ‘translate‘, ‘upper‘, ‘zfill‘]
时间: 2024-10-02 01:00:08

Python笔记5#面向对象编程OOP的相关文章

Python:笔记(3)——面向对象编程

Python:笔记(3)--面向对象编程 类型与对象 术语 程序中存储的所有数据都是对象.每个对象都有一个身份.一个类别和一个值. 如:a=42,就是用值42创建了一个整数对象. 大多数对象都拥有大量特点的属性和方法. 属性就是与对象相关的值. 方法就是被调用时将在对象上执行某些操作的函数. 使用 . 运算符可以访问属性和方法. Python中对象的一些说明 检查对象类型最佳的方式是利用内置函数 isinstance(object,type) 所有对象都有引用计数,当一个对象的引用计数归零时,他

2016/1/17 笔记 1,面向对象编程OOP 2,类

面向对象编程OOP 编程方式的发展 1,面向过程 重用性低 维护工作量大  2,面向对象 重用性高 维护容易 概念 1,对象 Object 一个具体的事物 是类的实例      2,类Class 同一类事物的统称 具有相同属性和行为的一类实体 特性:1,封装:  oop的核心思想           封装属性和行为,隐藏细节           保证内部数据完整性        2,继承: 子类自动继承所有父类的属性和行为           java是单继承 所有类的父类Object     

python 学习笔记7 面向对象编程

一.概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." 二.创建类和对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 "类" 和 "对象" 来实现,所以,面向对象编程其实就是对 "类" 和 "对象" 的使用. 类就是一个模板,模板里可以包含多个函数,函数里实现一些功能 对象

23 Python - 面向对象编程OOP

面向对象编程OOP 01 方法__repr__()和__str__() __repr__()方法类似java中的toString方法,用于反馈类的相关信息且可以自己定义,一般用于开发人员控制台调试 __rept__()和__str__()方法区别 在控制台交互测试时: 输入b返回__rept__()方法结果 输入print(b) 返回__str__()方法结果,如果没有定义__str__()方法  则用__rept__()结果代替__str__()方法结果 __rept__()   打印信息一般

24 Python - 面向对象编程OOP

面向对象编程OOP 01内容回顾 02属性@property本质是函数 未用属性前内容 使用属性后内容 @property  属性本质是函数,但是用起来像字段 03继承.多态示例 继承通过下面的一个基类 和一个派生类讲解 里面用到了继承和多态 [基类] [派生类] [函数调用] 04类嵌套如Employee引用Department 注意:在Employee的init()的参数中用department:Department来说明department是一个类,这样写有利于代码可读性 调用 原文地址:

day10_python学习笔记_chapter13_面向对象编程

1. class NewClass(parent): def .... 如果没有父类, 则默认继承object类 2. 类属性访问(类似java中的静态属性和方法)直接用类名.属性名, 在python中, 如果没有创建实例, 方法不能被调用.方法必须绑定到一个实例才能直接被调用. class C(object): foo = 100 访问 C.foo 3. 特殊的类属性: C.__name__, C.__doc__ , C.__bases__, C.__dict__ , C.__module__

Day6 - Python基础6 面向对象编程

Python之路,Day6 - 面向对象学习 本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, 狗可以咬人,怎么描述这种不同的角色和他们的功能呢? 你搜罗了自己掌握的所有技能,写出了下面的代码来描述这两个角色 1 2 3 4 5 6 7 8 9 10 11

python异常处理和面向对象编程总结

异常处理和面向对象编程,是python编程中,比较重要的基础.在实际生产编程设计和开发中,异常处理和面向读象都是必须在设计和开发过程中充分考虑的.    对于python开发和面向对象这两部分基础,用一个python程序进行封装说明,结果如下: #!/usr/bin/env python # _*_ coding:utf-8 _*_ ################# #异常处理 ################# print ''' 异常处理是用于处理软件或信息系统中出现的异常状况的一种机制,

python之路---面向对象编程(一)

一.设计思想的发展 面向机器(代码复杂,效率低,学习成本高,开发周期长)-------->面向过程(扩展性差,不适用多变的需求改变)----------->面向对象(扩展性好,但是可控性差) 二.面向过程和面向对象对比 面向过程: 定义:面向过程的核心是过程(即流水线式设计),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了程序的复杂度 缺点是:一套流水线或者流程就是用来解决一个问题,生产汽水的流水线无法生产汽车,即便是能,也