一、类和对象
Python是一种基于面向对象编程(OOP)的语言,面向对象编程主要的思想是将程序中的所有实体(如数据和功能)看作对象,通过定义对象之间的关系来描述程序。
在Python中,类(class)是一种用户自定义的对象类型,它定义了一组数据和方法。通过类可以创建多个具有相同属性和方法的对象。对象(object)是类的实例化,每个对象都具有类定义的相同方法,但具有不同的数据属性。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def get_name(self):
return self.name
def get_age(self):
return self.age
person1 = Person("Tom", 20)
person2 = Person("John", 25)
print(person1.get_name())
print(person2.get_age())
以上代码中,类Person包含了两个数据属性(name和age)和两个方法(get_name和get_age)。通过类创建了两个对象(person1和person2),每个对象的数据属性不同,但是它们都可以通过调用类定义的方法来获取它们的属性值。
二、继承
面向对象编程的一个重要的特性是继承,它允许子类(子类继承自父类)拥有父类的属性和方法。子类可以通过继承来重用父类的代码,并且可以在不影响父类的情况下对其进行扩展。
class Animal:
def __init__(self):
print("Animal created")
def who_am_i(self):
print("I am an animal")
def eat(self):
print("I am eating")
class Dog(Animal):
def __init__(self):
Animal.__init__(self)
print("Dog created")
def who_am_i(self):
print("I am a dog")
dog1 = Dog()
dog1.who_am_i()
dog1.eat()
以上代码中,Dog类继承自父类Animal,并使用了Animal类的构造函数。然后,重写了父类的方法who_am_i,并增加了一个新的方法eat。创建了一个Dog类的实例对象dog1,并调用这个实例对象的两个方法:who_am_i和eat。此时,who_am_i会调用Dog类定义的方法,而eat会调用从父类继承而来的方法。
三、多态
多态(polymorphism)是面向对象编程的另一个重要特性,它允许不同的对象对同一消息作出不同的响应。多态可以增加代码的灵活性和可维护性,在程序的后期扩展和修改会变得更加容易。
class Shape:
def __init__(self):
pass
def area(self):
pass
class Rectangle(Shape):
def __init__(self, length, breadth):
Shape.__init__(self)
self.length = length
self.breadth = breadth
def area(self):
return self.length * self.breadth
class Circle(Shape):
def __init__(self, radius):
Shape.__init__(self)
self.radius = radius
def area(self):
return 3.14 * self.radius * self.radius
shapes = [Rectangle(10, 5), Circle(7)]
for shape in shapes:
print(shape.area())
以上代码中,Shape类定义了一个方法area,但它是一个抽象方法,没有具体实现。Rectangle和Circle类都继承自Shape类,并分别实现了自己的area方法。创建了一个shapes列表,其中包含了一个Rectangle和一个Circle对象。在循环中,对shapes列表进行遍历,对于每一个对象,调用它们的area方法。Rectangle类的area方法会返回矩形的面积,而Circle类的area方法会返回圆的面积。
四、封装
封装(encapsulation)是面向对象编程的一种思想,它可以隐藏对象的实现细节,并将对象的状态和行为作为一个整体来处理。
在Python中,通过使用双下划线(__)来实现封装。双下划线开头的属性或方法被视为私有的,不能从对象外部访问。
class Employee:
def __init__(self, name, salary):
self.__name = name
self.__salary = salary
def get_name(self):
return self.__name
def get_salary(self):
return self.__salary
employee = Employee("Tom", 5000)
print(employee.get_name())
print(employee.get_salary())
以上代码中,Employee类定义了两个私有属性:__name和__salary,为了让外部访问这两个属性,分别提供了get_name和get_salary两个公共方法。成功创建了一个Employee的实例对象employee,并通过调用它的两个公共方法来获取它的私有属性值。
五、总结
Python Classpoint提供了丰富的面向对象编程的特征,可以帮助开发者更加灵活和高效地开发程序。通过类和对象可以封装数据和行为,并且可以实现继承和多态,可以提高代码的复用性和可扩展性。