首页 > 代码库 > 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