Python面向对象程序设计OOP入门教程
什么是面向对象编程
面向对象编程(Object Oriented Programming,OOP)是一种常用的编程思想和方法。它把现实世界中的事物看作对象,通过封装、继承、多态等概念来描述对象及其之间的关系,以进一步实现程序的模块化、复用、扩展和维护。
在 Python 中,一切事物都是对象。Python 中的面向对象编程具有以下特点:
- 支持多重继承;
- 支持方法重载;
- 支持运算符重载;
- 方便易用,代码简洁。
类和实例
在 Python 中,类(Class)是创建对象的模板。通过定义类,我们可以定义一类对象,这些对象都具有相同的属性和方法。
实例(Instance)则是类的实体,也就是由类创建的对象。
下面的代码展示了一个简单的 Person 类的定义,及其实例化过程。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def say_hello(self):
print("Hello, my name is %s, and I am %s years old." % (self.name, self.age))
p = Person("Lucas", 26)
p.say_hello() # Hello, my name is Lucas, and I am 26 years old.
上面的代码中,Person 类有一个 __init__
方法,用于对象的初始化。self
表示类的实例本身,当我们创建一个 Person 实例时,self
会自动指向这个新创建的实例对象,我们可以通过它来访问实例的属性和方法。
继承和重载
继承(Inheritance)是面向对象编程中的重要概念,它指的是一个类继承另一个类的属性和方法,从而在不改变原有类的基础上,增加或修改其行为。
Python 中支持多重继承,即一个子类可以继承多个父类的属性和方法。更具体地说,它采用了“类图”的概念,即我们可以通过一个无向图来描述类之间的继承关系。
下面的代码演示了一个派生自 Person 类的 Student 类,它增加了专业和成绩属性,并重载了 say_hello 方法,以满足学生的特殊需求。
class Student(Person):
def __init__(self, name, age, major, score):
super().__init__(name, age)
self.major = major
self.score = score
def say_hello(self):
print("Hello, my name is %s, and I am a student majoring in %s. My score is %s." % (self.name, self.major, self.score))
s = Student("Lucas", 26, "Computer Science", 95)
s.say_hello() # Hello, my name is Lucas, and I am a student majoring in Computer Science. My score is 95.
在上面的代码中,Student 类继承了 Person 类,并增加了 major 和 score 属性。在 __init__
方法中,我们通过调用 super()
方法来调用父类的构造函数,从而完成实例的初始化。
此外,我们还重载了 say_hello 方法,以适应 Student 类的特殊需求。这个重载的方法会替换父类中的同名方法,从而实现不同类别对象的多样化输出。
示例:图形的面积和周长
下面的示例演示了如何把面向对象编程的思想应用于计算图形的面积和周长。
我们定义一个 Shape 类,用来描述图形,并提供一个 area
方法和一个 perimeter
方法,分别计算图形的面积和周长。我们派生出 Circle 类和 Rectangle 类,用来分别表示圆形和矩形,并重载它们的 area
和 perimeter
方法,以适应图形特有的计算方法。
import math
class Shape:
def area(self):
pass
def perimeter(self):
pass
class Circle(Shape):
def __init__(self, r):
self.r = r
def area(self):
return math.pi * self.r ** 2
def perimeter(self):
return 2 * math.pi * self.r
class Rectangle(Shape):
def __init__(self, w, h):
self.w = w
self.h = h
def area(self):
return self.w * self.h
def perimeter(self):
return 2 * (self.w + self.h)
c = Circle(4)
r = Rectangle(3, 5)
print("The area of the circle is", c.area()) # The area of the circle is 50.26548245743669
print("The perimeter of the circle is", c.perimeter()) # The perimeter of the circle is 25.132741228718345
print("The area of the rectangle is", r.area()) # The area of the rectangle is 15
print("The perimeter of the rectangle is", r.perimeter()) # The perimeter of the rectangle is 16
上面的代码中,Shape 类是一个抽象类,它提供了 area
和 perimeter
两个抽象方法,用来规范派生类的行为。
Circle 类和 Rectangle 类分别继承自 Shape 类,并提供相应的属性和方法,用来描述圆形和矩形的特征,并计算它们的面积和周长。
最后,我们创建了一个 Circle 实例和一个 Rectangle 实例,分别调用它们的 area
和 perimeter
方法,得到相应的结果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】 - Python技术站