类与实例
类是抽象的模板,实例是根据类创建出来的一个个具体的“对象”;
术语解释
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
方法:类中定义的函数。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
实例变量:定义在方法中的变量,只作用于当前实例的类。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
实例化:创建一个类的实例,类的具体对象。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法
定义类
class Student(object):
pass
#类通常是以大写字母开头,object表示该类是从那个类继承下来的(如果最上面的类找不到继承直接写object即可)
类的初始化
(_ init )方法的第一个参数永远是self,表示创建的实例本身,因此,在 init _方法内部,就可以把各种属性绑定到self。
class Int:
def __init__(self, a, b): #self代表实例
self.r = a
self.i = b
x = Complex(3, 4) #实例化对象是需要传递两个参数
print(x.r, x.i)
输出结果:3 4
类对象
类对象支持两种操作:属性引用和实例化
#定义Student类:
class Student:
id = 123
def f(self):
return 'hello world'
#实例化类
x = Student()
#访问类的属性和方法:
print("student的属性:",x.id)
print("student的方法:",x.f())
输出结果:
student的属性: 123
student的方法: hello world
类的方法
在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数:
class Student:
#定义基本属性
name = ''
age = 0
#设置访问限制:定义私有属性,私有属性在类外部无法直接进行访问
__weight = 0
#定义构造方法
def __init__(self,n,a,w):
self.name = n
self.age = a
self.__weight = w
def speak(self):
print("%s 说: 我 %d 岁。" %(self.name,self.age))
# 实例化类
p = people('xiaoming',10,30)
p.speak()
输出结果:
xiaoming 说: 我 10 岁。
类的继承:单继承和多继承
class Student:
name = ''
age = 0
__weight = 0
def __init__(self,n,a,w):
self.name = n
self.age = a
self.__weight = w
def speak(self):
print("%s 说: 我 %d 岁。" %(self.name,self.age))
#单继承
class people(Student):
grade = ''
def __init__(self,n,a,w,g):
#调用父类的构函
Student.__init__(self,n,a,w)
self.grade = g
#覆写父类的方法
def speak(self):
print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))
#多重继承准备
class speaker():
topic = ''
name = ''
def __init__(self,n,t):
self.name = n
self.topic = t
def speak(self):
print("我叫 %s,我是一个演说家,我演讲的主题是 %s"%(self.name,self.topic))
#多重继承
class sample(speaker,people):
a =''
def __init__(self,n,a,w,g,t):
people.__init__(self,n,a,w,g)
speaker.__init__(self,n,t)
test = sample("Tim",25,80,4,"Python")
print(test.speak()) #方法名同,默认调用的是在括号中排前地父类的方法
输出结果:
我叫 Tim,我是一个演说家,我演讲的主题是 Python
类的专有方法
__init__ : 构造函数,在生成对象时调用
__del__ : 析构函数,释放对象时使用
__repr__ : 打印,转换
__setitem__ : 按照索引赋值
__getitem__: 按照索引获取值
__len__: 获得长度
__cmp__: 比较运算
__call__: 函数调用
__add__: 加运算
__sub__: 减运算
__mul__: 乘运算
__div__: 除运算
__mod__: 求余运算
__pow__: 乘方
错误和异常处理
Python有两种错误很容易辨认:语法错误和异常
在运行Python程序的时候,即便语法正确,也有可能发生错误。运行期检测到的错误被称为异常。
异常处理
try语句按照如下方式工作;
首先,执行try子句(在关键字try和关键字except之间的语句)
如果没有异常发生,忽略except子句,try子句执行后结束。
如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之后的代码。
如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。
###一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行;
###except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组;
###try except 语句还有一个可选的else子句,如果使用这个子句,那么必须放在所有的except子句之后。这个子句将在try子句没有发生任何异常的时候执行;
import sys
try:
f = open('myfile.txt')
s = f.readline()
i = int(s.strip())
except OSError as err:
print("OS error: {0}".format(err))
except (RuntimeError, TypeError, NameError):
print("Could not convert data to an integer.")
else:
print('ok !')
f.close()
异常抛出
raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类;
这里写代码片
重点内容
参考文章:
廖雪峰,菜鸟教程,w3cschool教程