Python 面向对象(OOP)基本概念

1.什么是面向对象(OOP)

面向对象(OOP)是一种程序设计思想,它把数据和对数据的操作封装在一起,使得重用性、灵活性和扩展性都更加强大。

Python是一种完全支持面向对象编程的语言,它使用了类(class)和对象(object)的概念,以及继承、封装和多态等特性来实现面向对象编程。

2.类和对象

2.1类的定义

在Python中,我们使用关键字class来定义一个类。一个类可以包含属性和方法,类中的属性和方法可以通过对象来访问。

class Person:

name = "Tom"

age = 20

def print_info(self):

print("Name:", self.name)

print("Age:", self.age)

这段代码中,我们定义了一个Person类,它有两个属性name和age,以及一个方法print_info。在方法print_info中,我们使用了self关键字,它代表一个对象,可以用来访问对象的属性。

2.2对象的创建

要创建一个对象,我们需要使用类名加上括号的方式来调用类的构造函数(__init__方法)。下面是一个例子:

person1 = Person()

person1.print_info()

这段代码中,我们创建了一个名为person1的Person对象,并通过调用print_info方法来访问对象的属性name和age。

2.3属性的访问

在类中定义的属性和方法都可以通过对象来访问,属性的访问使用点号(.)符号来连接。下面是一个例子:

person1.name = "Bob"

person1.age = 30

person1.print_info()

这段代码中,我们修改了person1对象的属性name和age,并通过调用print_info方法来验证修改结果。

2.4方法的调用

方法的调用同样使用点号(.)符号来连接。下面是一个例子:

person2 = Person()

person2.name = "Alice"

person2.print_info()

这段代码中,我们创建了一个名为person2的Person对象,通过修改属性name的值,再调用print_info方法来验证结果。

3.继承

Python中支持继承,继承是面向对象编程中非常重要的一种特性,它允许我们在已有的类基础上,创建一个新的类,同时保留父类的特性。

3.1父类和子类

在Python中,我们使用关键字class来定义一个类,继承是通过在类名后面加上小括号,并在小括号中指定父类的名称来实现的。下面是一个例子:

class Student(Person):

grade = 3

def print_grade(self):

print("Grade:", self.grade)

这段代码中,我们定义了一个Student类,它继承自Person类,并添加了一个新的属性grade和一个新的方法print_grade。

3.2子类的使用

使用子类时,只需要创建一个子类的对象即可,这个对象可以访问父类和子类中定义的属性和方法。下面是一个例子:

student1 = Student()

student1.name = "Alice"

student1.age = 18

student1.print_info()

student1.print_grade()

这段代码中,我们创建了一个名为student1的Student对象,并访问了父类Person和子类Student中定义的属性和方法。

4.封装

封装是一种将数据和操作数据的方法放在一起的编程概念。在现实世界中,我们执行一个操作时,往往只需要知道如何调用执行就可以了,却并不需要了解这个操作的具体实现过程。

在面向对象编程中,我们使用访问控制和属性来实现封装。

4.1访问控制

Python中通过下划线来表示访问控制的作用,下划线有三种类型:

单下划线(_):表示不应该被外部直接访问的属性或方法,但可以被子类或派生类访问。

双下划线(__):表示私有属性或方法,不能被外部访问,也不能被子类或派生类访问。

双下划线开头且没有双下划线结尾(___):这种属性是系统定义的特殊方法或属性,对Python解释器有特殊含义。

4.2属性

在Python中,我们使用@property装饰器来定义属性,它将一个方法装饰成一个属性,对属性进行访问时会调用这个方法。

class Temperature:

def __init__(self, value=0.0):

self._value = value

@property

def value(self):

return self._value

@value.setter

def value(self, value):

if value < -273.15:

raise ValueError("Temperature value too low.")

self._value = value

这段代码中,我们定义了一个Temperature类,它有一个属性value,我们使用@property装饰器来定义这个属性,并在value方法中进行属性的读取和设置操作。

4.3属性的访问

通过上面的@property装饰器,我们可以像访问普通属性一样访问这个属性:

t = Temperature(20)

print(t.value)

t.value = 30

print(t.value)

这段代码中,我们创建了一个名为t的Temperature对象,并通过直接访问属性value来获取和设置属性value的值。

5.多态

多态是一种同一种操作作用于不同的对象上,产生不同结果的情况,这种特性可以增加代码的复用性和灵活性。

在Python中,我们可以通过方法重载和方法重写实现多态。

5.1方法重载

在Python中,方法重载指的是在一个类中定义多个方法名相同但参数不同的方法。下面是一个例子:

class Math:

def add(self, x, y):

return x + y

def add(self, x, y, z):

return x + y + z

m = Math()

print(m.add(1, 2))

print(m.add(1, 2, 3))

这段代码中,我们定义了一个Math类,它有两个方法名相同但参数不同的方法add。在进行方法调用的时候,Python会根据传入的参数自动调用对应的方法。

5.2方法重写

在Python中,方法重写指的是子类对父类同名方法的重新实现。下面是一个例子:

class Animal:

def speak(self):

print("I am an animal.")

class Cat(Animal):

def speak(self):

print("I am a cat.")

class Dog(Animal):

def speak(self):

print("I am a dog.")

a = Animal()

c = Cat()

d = Dog()

a.speak()

c.speak()

d.speak()

这段代码中,我们定义了一个Animal类和两个子类Cat和Dog,子类分别对父类的方法speak进行了重新实现。在进行方法调用的时候,Python会根据对象的类型自动调用对应的方法。

6.总结

本文主要介绍了Python面向对象编程(OOP)中的基本概念,包括类和对象、继承、封装和多态等特性。对于面向对象编程初学者来说,掌握这些基本概念是非常重要的,它们可以让程序代码更加灵活、可读性更高、复用性更强。

后端开发标签