1. Python面向对象高级
1.1 类与对象
在Python中,一切皆为对象。 类是对象的抽象概念,而对象则是类的实例。Python中的类可以使用class关键字进行定义。
在定义类时,通常会定义一些属性和方法。属性是指类的数据成员,可以理解为类的变量,而方法则是指类的函数。
下面是一个简单的例子:
class Person:
name = "张三"
def say_hi(self):
print("你好,我是" + self.name + "。")
在上面的例子中,我们定义了一个Person类,其中name属性为"张三",say_hi()方法可以打印出"你好,我是张三。"。接着我们可以使用下面这段代码创建一个对象:
p = Person()
p.say_hi()
在这里,我们使用Person()创建了一个对象p,然后调用了p的say_hi()方法,输出的内容为"你好,我是张三。"。
1.2 面向对象的三大特性
在面向对象编程中,有三个重要的特性,分别是继承、封装和多态。
1.2.1 继承
继承是指一个类可以继承另一个类的属性和方法。被继承的类称为父类或基类,继承的类称为子类或派生类。
下面是一个简单的例子:
class Parent:
def __init__(self, name):
self.name = name
def say_hi(self):
print("你好,我是" + self.name + "的父亲。")
class Child(Parent):
def say_hi(self):
print("你好,我是" + self.name + "的儿子。")
c = Child("张三")
c.say_hi()
在这个例子中,我们定义了一个Parent类,并在其中定义了__init__()和say_hi()方法。接着我们定义了一个Child类,并继承了Parent类。我们在Child类中重写了say_hi()方法,然后创建了一个Child对象c,并调用了c的say_hi()方法。
在这个例子中,因为Child类继承了Parent类,所以Child类中可以访问Parent类中的属性和方法。在Child类中,我们重写了Parent类中的say_hi()方法,因此调用c的say_hi()方法时,输出的内容为"你好,我是张三的儿子。",而不是"你好,我是张三的父亲。"。
1.2.2 封装
封装是指将属性和方法组合成一个类,并对外部隐藏其具体实现细节的过程。
在Python中,可以通过在属性名前加上两个下划线__来实现属性的封装:
class Person:
def __init__(self, name):
self.__name = name
def say_hi(self):
print("你好,我是" + self.__name + "。")
p = Person("张三")
p.say_hi()
print(p.__name)
在这里,我们在属性名前加上了两个下划线__,表示这个属性是私有属性,外部不能直接访问。在say_hi()方法中,我们可以使用self.__name来访问这个属性,但在外部不可以直接访问。
运行上面的代码,会发现最后一行输出了AttributeError,这是因为在外部访问__name属性是不被允许的。这样做的目的是,如果我们在类的内部修改了属性,就不会影响到外部的代码。
1.2.3 多态
多态是指同一种行为具有多种实现方式。在Python中,多态的实现方式有函数重载和运算符重载等。
下面是一个简单的例子:
class Animal:
def shout(self):
pass
class Dog(Animal):
def shout(self):
print("汪汪汪!")
class Cat(Animal):
def shout(self):
print("喵喵喵!")
def shout_twice(animal):
animal.shout()
animal.shout()
d = Dog()
c = Cat()
shout_twice(d)
shout_twice(c)
在这个例子中,我们定义了一个Animal类,并在其中定义了一个shout()方法。然后我们又定义了Dog类和Cat类,并分别重写了shout()方法。
接着我们定义了一个叫做shout_twice()的函数,它的参数是一个Animal类型的对象。在函数内部,我们调用了两次传入的对象的shout()方法。
最后我们分别创建了一个Dog对象d和一个Cat对象c,并将它们作为参数传递给shout_twice()函数。运行上面的代码,会看到下面的输出:
汪汪汪!
汪汪汪!
喵喵喵!
喵喵喵!
在shout_twice()函数中,我们传递了一个Dog对象和一个Cat对象作为参数,虽然它们的类型不同,但是它们都有shout()方法。因此在shout_twice()函数中就可以通过调用对象的shout()方法来实现多态。这也是多态的一大优点,可以让程序更加灵活和可扩展。
2. Python的异常、模块以及包管理
2.1 异常处理
在程序运行过程中,有时会出现异常,这时使用异常处理机制可以让程序更加健壮。
在Python中,使用try/except语句可以进行异常处理。
下面是一个简单的例子:
try:
num = int(input("请输入一个整数:"))
print("100 /", num, "=", 100 / num)
except ValueError:
print("您输入的不是整数,请重新输入。")
except ZeroDivisionError:
print("除数不能为0,请重新输入。")
在这个例子中,我们使用了try/except语句来处理异常。我们在try块中尝试接收用户输入的整数,并计算100除以这个整数的结果。如果用户输入的不是整数,会抛出ValueError异常;如果用户输入的是0,会抛出ZeroDivisionError异常。于是我们使用两个except语句来捕获这两种异常,并输出相应的提示消息。
2.2 模块与包
在Python中,一个.py文件就是一个模块。而多个模块可以组成一个包。
2.2.1 模块
模块就是一个包含Python定义和语句的文件。我们可以在一个模块中定义变量、函数和类,并在其他文件中使用。
下面是一个名为math.py的模块:
pi = 3.1415926
def square(x):
return x * x
class Circle:
def __init__(self, radius):
self.radius = radius
def area(self):
return pi * square(self.radius)
c = Circle(5)
print(c.area())
在这个模块中,我们定义了一个变量pi、一个函数square()和一个类Circle。接着我们创建了一个Circle对象c,并调用它的area()方法,输出了圆的面积。
我们可以在其他地方导入这个模块,并使用其中的变量、函数和类。
下面是一个导入math模块的例子:
import math
c = math.Circle(5)
print(c.area())
在这个例子中,我们使用import关键字导入了math模块,并使用math.Circle()和math.pi来访问其中的类和变量。
2.2.2 包
包是一种可以包含多个模块的特殊文件夹。它可以让我们更好地组织我们的代码,使其更易于维护。
一个包通常会包含多个模块,以及一个名为__init__.py的文件。__init__.py文件通常为空,但它可以在包被导入时执行一些初始化操作。
下面是一个名为my_package的包的例子:
my_package/
__init__.py
math.py
string.py
在这个包中,我们包含了两个模块math.py和string.py。接着我们将整个包my_package导入:
import my_package
c = my_package.math.Circle(5)
print(c.area())
在这个例子中,我们使用import关键字导入了整个my_package包,并使用my_package.math.Circle()和my_package.math.pi来访问其中的类和变量。
2.3 包管理
在Python中,我们可以使用pip来管理第三方库的安装和更新。
2.3.1 安装库
我们可以使用pip install命令来安装第三方库。例如,要安装pandas库,可以使用以下命令:
pip install pandas
当我们执行这个命令时,pip会从互联网上下载pandas库并安装到我们的Python环境中。
2.3.2 更新库
我们可以使用pip install命令来更新已安装的库。例如,要更新pandas库,可以使用以下命令:
pip install --upgrade pandas
当我们执行这个命令时,pip会检查是否存在更新版本的pandas库,如果有,则会自动下载并安装更新版本。
2.3.3 列出已安装的库
我们可以使用pip list命令来列出已安装的第三方库。例如,要列出所有已安装的库,可以使用以下命令:
pip list
当我们执行这个命令时,pip会列出所有已安装的库的名称和版本号。
2.3.4 删除库
我们可以使用pip uninstall命令来删除已安装的库。例如,要删除pandas库,可以使用以下命令:
pip uninstall pandas
当我们执行这个命令时,pip会将已安装的pandas库从我们的Python环境中卸载。
总结
在本文中,我们介绍了Python的面向对象高级和异常处理机制。我们还介绍了模块和包的概念,如何编写、导入和使用模块和包。最后,我们还介绍了pip工具的使用,包括第三方库的安装、更新和删除。
掌握了这些知识,我们可以更加熟练地使用Python进行开发,编写出更加健壮、易于维护的代码。