python基础篇16-面向对象初级

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。这些方法可以实现对封装属性的赋值和取值操作。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签