首页 > 代码库 > Python笔记5#面向对象编程OOP

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 : 92A

 

▲访问限制

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

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

 

▲继承和多态

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

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

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

示例代码如下:

#定义一个继承object的类Animalclass Animal(object):    def run(self):        print(Animal is running!)#定义一个类Animal的子类Dogclass Dog(Animal):#重写父类的run()方法    def run(self):        print(Dog is running!)#增加eat()方法    def eat(self):        print(Dog is eating!)#创建一个Animal的实例dog1dog1 = Animal()dog1.run()#创建一个Dog的实例dog2dog2 = 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!TrueFalseTrueTrueAnimal 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, isdecimal, 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]

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