python 面向对象基础语法

1. 面向对象基础

首先我们来谈谈什么是面向对象基础。面向对象基础是指一种编程思想,它主要是以对象作为程序的基本单元,以及对象之间的互动来完成任务。而Python是一种不区分基本数据类型和对象的语言,一切都是对象。

1.1 类和对象

在Python中,类是一种面向对象编程的基本结构。我们可以通过定义类创建对象,也可以通过类来访问其属性和方法。

定义一个类可以使用class关键字,其中包含类的名称和构造函数,构造函数通常称为__init__方法。在__init__方法中,我们定义对象的属性。

class Student:

def __init__(self,name,score):

self.name = name

self.score = score

上述类定义了一个名为Student的类,它有两个属性:name和score。接下来我们来创建一个Student对象:

s = Student('Tom',90)

上述代码将创建一个名为s的学生对象,他的名字是Tom,分数是90分。我们也可以访问对象属性:

print(s.name)

print(s.score)

在上述代码中,我们使用点号(.)来访问对象的属性。这里我们将输出:

Tom

90

1.2 继承

继承是指在现有类的基础上创建一个新类,新类将继承原有类的所有属性和方法。

创建子类时使用的class关键字后面跟着父类名即可。例如,我们创建一个新类Teacher,它将继承自Student类:

class Teacher(Student):

def __init__(self,name,score,subject):

super().__init__(name,score)

self.subject = subject

在上述代码中,我们使用了super()函数来调用父类的构造函数,这里Teacher类有一个额外的属性subject。

我们可以像以前一样创建一个新的Teacher对象,并访问它的属性:

t = Teacher('Bob',80,'Math')

print(t.name)

print(t.score)

print(t.subject)

这里我们将输出:

Bob

80

Math

1.3 多态

多态指的是在不同的情况下,同一个对象会表现出不同的形态和特征。在Python中,由于语言的动态特性,我们可以轻松地实现多态。

例如,我们定义一个可以打印任何对象的函数:

def print_info(obj):

print(obj.name)

print(obj.score)

s = Student('Tom',90)

t = Teacher('Bob',80,'Math')

print_info(s)

print_info(t)

在上述代码中,我们定义了一个函数print_info,它接受一个参数obj。由于Python不区分基本类型和对象,因此可以接受任何类型的参数。

在函数中我们调用了对象的属性name和score,由于Student和Teacher类都有这两个属性,因此我们可以将Student和Teacher的对象传递给该函数。

最后我们将输出:

Tom

90

Bob

80

2. 封装

封装是指将一个对象的属性和方法封装在一起,隐蔽对象的实现细节,提供公共接口供用户使用。在Python中,我们可以通过使用属性和方法的不同访问权限来实现封装。

2.1 属性访问权限

属性访问权限是指属性对外界的可见性。在Python中,属性只有两种访问权限:公共属性和私有属性。

公共属性是指可以从类的任何地方访问的属性。私有属性是指只能从类内部访问的属性,并且不能从类外部进行访问。

在Python中,我们可以通过在属性名称前面添加两个下划线来定义私有属性:

class Student:

def __init__(self,name,score):

self.name = name

self.__score = score

s = Student('Tom',90)

print(s.name)

print(s.__score)

在上述代码中,我们定义了一个名为__score的私有属性。试图访问该属性将会抛出AttributeError异常。

属性名称前面添加一个下划线表示属性是受保护的,可以被子类使用,但是不应该被直接访问。例如:

class Student:

def __init__(self,name,score):

self.name = name

self._score = score

class Teacher(Student):

def show_score(self):

print(self.name)

print(self._score)

t = Teacher('Bob',80)

t.show_score()

在上述代码中,我们使用一个下划线来定义受保护的属性_score。在Teacher类中,我们定义了一个方法show_score,该方法将访问父类的属性_name和受保护的属性_score。

2.2 方法访问权限

方法访问权限是指方法对外界的可见性。在Python中,方法也有两种访问权限:公共方法和私有方法。

公共方法是指可以从类的任何地方访问的方法。私有方法是指只能从类内部访问的方法,并且不能从类外部进行访问。

在Python中,我们可以通过在方法名称前面添加两个下划线来定义私有方法:

class Student:

def __init__(self,name,score):

self.name = name

self.score = score

def __show_score(self):

print(self.score)

s = Student('Tom',90)

s.__show_score()

在上述代码中,我们定义了一个名为__show_score的私有方法。试图访问该方法将会抛出AttributeError异常。

属性名称前面添加一个下划线表示方法是受保护的,可以被子类使用,但是不应该被直接访问。例如:

class Student:

def __init__(self,name,score):

self.name = name

self._score = score

def _show_score(self):

print(self._score)

class Teacher(Student):

def show_score(self):

print(self.name)

self._show_score()

t = Teacher('Bob',80)

t.show_score()

在上述代码中,我们使用一个下划线来定义受保护的方法_show_score。在Teacher类中,我们定义了一个方法show_score,该方法将访问父类的属性_name和受保护的方法_show_score。

3. 多重继承

多重继承是指一个类可以继承多个父类的属性和方法。在Python中,我们可以通过使用逗号分隔多个父类来实现多重继承。

例如,我们定义了两个父类:

class Person:

def __init__(self,name):

self.name = name

def show_name(self):

print(self.name)

class Age:

def __init__(self,age):

self.age = age

def show_age(self):

print(self.age)

然后我们定义一个子类,并继承这两个父类:

class Student(Person,Age):

def __init__(self,name,age):

Person.__init__(self,name)

Age.__init__(self,age)

s = Student('Tom',20)

s.show_name()

s.show_age()

在上述代码中,我们定义了一个名为Student的子类,它继承了Person和Age两个父类。在子类的构造函数中,我们调用了父类的构造函数,以便于初始化属性。

最后我们将输出:

Tom

20

4. 总结

本文主要介绍了Python面向对象编程中的基本语法,包括类和对象的定义、继承、多态和封装等概念。同时,我们也介绍了属性和方法的访问权限,以及多重继承的使用方法。

需要注意的是,在面向对象编程中,编写代码应该尽量避免使用全局变量,因为全局变量使得代码的维护变得困难。我们可以使用类属性和类方法来解决这个问题。

最后,请注意Python是一个非常灵活的语言,有很多不同的编程风格和设计模式。在实际编程中,我们应该选择正确的方式来编写代码,保持代码风格的一致性,以便于代码的维护和扩展。

后端开发标签