概述
一、什么是面向对象
面向对象程序设计(Object-oriented programming,OOP)不仅指一种程序设计方法,更是一种程序开发方式。
重要的面向对象编程语言包含Common Lisp、Python、C++、Objective-C、Smalltalk、Delphi、Java、Swift)、C#、Perl、Ruby 与 PHP等。
在编程解决问题时,面向对象程序设计开发方式关注的是“谁来做”——即谁来解决问题。
二、面向对象编程中的主要概念
1、类与对象
类(class):定义了一件事物的抽象特点。一般的,类定义了一个事物的属性和它可以做到的行为。编程时,我们所定义的类包含了数据的形式以及对数据的操作。举例来说,“狗”这个类包含了狗的一切基础特征(属性/形式),即所有“狗”都共有的特征或行为,如狗的繁殖、毛皮颜色和吠叫的能力。
通俗地说,类是具有相同属性和方法的对象的集合。“人”可归为一个类,各种动物各有它们所属的类,“大学”可归为一个类,等等。
方法:在类中定义的函数。
在Python中通过关键字class实现类的定义,语法如下:
classClassName:
block_class
在块block_class处写入类的成员变量(特征/属性/形式)及函数(操作)。如下是一个类dog的定义及其实例化:
classdog:
# dog类的属性
fur_color = "yellow"
# 方法
defBark(self):
return"汪汪汪汪"
# 实例化类——实例化类后才能使用其属性与方法
black_dog = dog()
# 访问类的属性和方法
print("dog类的fur_color属性:",black_dog.fur_color)
print("dog类的bark方法:", black_dog.Bark())
对象(object):是类的实例,即实例化后的类,如上代码中的black_dog就是一个实例化的对象。black_dog是一只具体的狗。dog类是抽象化的狗,指所有的狗。
在上述代码中,可以看到类的方法和普通的函数有一个特别的区别——类的方法必须有一个额外的第一个参数名称,习惯上用self。self代表的是类的实例。
类有一个名为 init()的特殊方法(构造方法),该方法在类实例化时会自动调用。其定义如下:
def__init__(self):
self.data = []
定义一个带构造方法的类:
classComplex:
def__init__(self, realpart, imagpart):
self.r = realpart # self 即指 Complex 的实例对象
self.i = imagpartx = Complex(2.2, 4.5)
print(x.r,x.i) #输出结果:2.2 4.5
类的私有属性与私有方法:
__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。
__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类地外部调用。self.__private_methods。
代码示例:
classJustCounter:
__secretCount = 0# 私有变量
publicCount = 0# 公开变量
defcount(self):
self.__secretCount += 1
self.publicCount += 1
print (self.__secretCount)
counter = JustCounter()
counter.count()
counter.count()
print (counter.publicCount)
print (counter.__secretCount) # 报错,实例不能访问私有变量
执行以上程序输出结果为:
122Traceback (most recent call last): File "test.py", line 16, in print (counter.__secretCount) # 报错,实例不能访问私有变量AttributeError: 'JustCounter' object has no attribute '__secretCount'
2、继承
继承(inheritance):指通过一个已有的类(称之为父类)定义另外一个类(称之为子类),子类共享父类开放的属性和方法。子类的对象除了是子类的一个实例,还是其父类的一个实例。
# 定义父类
classbaseClassName:
block_class
# 定义子类
classsubClassName(baseClassName):
block_class
示例:
classpeople:
name = '' age = 0
def__init__(self, name, age, weight):
self.name = name
self.age = age
self.__weight = weight
defspeak(self):
print("%s 说:我 %d 岁了" %(self.name,self.age))
classstudent(people):
grade = ''
def__init__(self, name, age, weight, grade):
people.__init__(self, name, age, weight)
self.grade = grade
# 覆写父类的speak方法
defspeak(self):
print("%s 说:我 %d 岁了,我在读 %d 年级。" %(self.name, self.age, self.grade))
Liming = student('Liming', 10, 55, 3)
Liming.speak() # 执行后输出结果:Liming 说:我 10 岁了,我在读 3 年级。
上述代码为单继承。同样的,一个子类也可以继承多个父类。同时,在上述代码中,在子类student中我们重新写了一个speak方法,这样会把父类people中写的speak方法覆盖。如果想重新使用父类的speak方法,可使用如下代码:
super(student,Liming).speak() #用子类对象调用父类已被覆盖的方法
3、其他概念
多态(polymorphism):指不同的方法作用于不同对象,可以有不同的解释,产生不同的执行结果。
示例如下:
classdog:
def__init__(self,Bark):
self.Bark = Bark
defcall(self):
print("狗叫:%s" %(self.Bark))
classchick:
def__init__(self,Crow):
self.Crow = Crow
defcall(self):
print("鸡叫:%s" %(self.Crow))
little_dog = dog('汪汪汪汪')
Lusi = chick('叽叽叽叽')
# 狗吠little_dog.call()
# 鸡叫Lusi.call()
都是叫,但是叫的表现方式却大不相同。
最后
以上就是默默歌曲为你收集整理的python中级教程_Python 中级教程-面向对象的全部内容,希望文章能够帮你解决python中级教程_Python 中级教程-面向对象所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复