1. 面向对象初步
面向对象是一种编程思想,将程序进行分解,每个部分进行独立开发,最后再进行整合。在面向对象编程中,我们定义了类,它是一种定义对象属性和行为的蓝图。通过类创建的对象,既可以有属性,也可以有方法来操作属性。Python是一种面向对象的编程语言。
1.1 类和对象
在面向对象的编程中,可以通过class关键字来定义一个类,其语法如下:
class 类名:
属性
方法
其中,类名是用来定义该类的名称,属性是用来定义某个数据的特征,而方法是用来定义该类的行为。
对于类,可以通过实例化来创建对象。在Python中,定义一个对象的语法如下:
对象名 = 类名(参数列表)
其中,对象名是用来定义该对象的名称,而参数列表则是用来指定创建对象时需要初始化的一些值。
1.2 属性和方法
类有成员属性和成员方法,成员属性是指该类中用于描述其对象特征的变量,而成员方法则是用来定义其对象的行为。
在Python中,我们可以通过定义类的成员方法和成员属性来完成对类的定义。例如:
class Pet:
age = 0
def __init__(self, name):
self.name = name
def set_age(self, age):
self.age = age
上面这段代码定义了一个名为Pet的类。该类中包括了一个age的成员属性和两个成员方法,其中,__init__方法用于初始化实例,而set_age方法则是用于设定实例的年龄属性。
2. 继承和多态
2.1 继承
继承是一种面向对象编程的重要概念,它可以帮助程序员避免重复编写大量的代码。通过继承,我们可以从父类中继承属性和方法,并且可以根据自己的需求对这些内容进行修改或者增加新的内容。在Python语言中,继承的语法如下:
class SubClass(SuperClass):
pass
其中,SubClass表示新定义的子类,而SuperClass表示被继承的父类。在父类中定义的属性和方法,子类都可以使用。
2.2 多态
多态是面向对象编程的另一个重要特性,它可以让不同的类使用相同的方法名来实现不同的功能。在Python语言中,多态的实现基于"鸭子类型"的概念。它指的是在调用方法时,不关心对象的具体类型,而只关心对象是否具有所需的方法或属性。
为了更好的说明多态,我们来看一下下面的代码:
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
pass
class Cat(Animal):
def eat(self):
print(self.name + " likes fish")
class Dog(Animal):
def eat(self):
print(self.name + " likes bones")
def feed(animal):
animal.eat()
cat = Cat("Tom")
dog = Dog("Husky")
feed(cat)
feed(dog)
上述代码定义了一个名为Animal的类,以及它的两个子类Cat和Dog。我们还定义了一个feed函数,它接受一个Animal类型的参数,并调用该参数的eat方法。由于Cat和Dog子类都定义了自己的eat方法,所以,在feed函数中传递的参数可以是Cat对象或者Dog对象。
3. 封装
3.1 封装的概念
封装是一种将对象属性和方法进行保护的技术,它可以避免对象属性被外部直接修改,避免类方法被外部直接调用。在Python中,我们可以使用双下划线"__"来实现封装,例如:
class Person:
def __init__(self, name, age):
self.__name = name
self.__age = age
def show(self):
print(self.__name + " " + str(self.__age))
p = Person("Tom", 18)
p.show()
在上述代码中,我们定义了一个名为Person的类,它包括一个属性name和一个属性age。为了实现封装,我们在属性名前面添加了双下划线。注意,在类外部是无法直接访问这些属性的,只能通过类内部定义的一些方法来进行访问。
3.2 getter和setter方法
虽然使用双下划线可以将属性进行封装,但是在某些情况下,我们仍然需要对封装的属性进行一些操作。此时,我们可以定义一些getter和setter方法来实现对属性的操作。在Python中,getter和setter方法的定义如下:
class Person:
def __init__(self, name, age):
self.__name = name
self.__age = age
def set_name(self, name):
self.__name = name
def set_age(self, age):
self.__age = age
def get_name(self):
return self.__name
def get_age(self):
return self.__age
def show(self):
print(self.get_name() + " " + str(self.get_age()))
p = Person("Tom", 18)
p.set_name("Jerry")
p.show()
在上述代码中,我们定义了四个方法,分别是set_name、set_age、get_name以及get_age。这些方法可以实现对封装属性的赋值和取值操作。