面向对象技术简介
名称 |
说明 |
类(Class) |
类是用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 |
方法 |
类中定义的函数。 |
类变量 |
类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。 |
数据成员 |
类变量或者实例变量用于处理类及其实例对象的相关的数据。 |
方法重写 |
如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。 |
实例变量 |
定义在方法中的变量,只作用于当前实例的类。 |
继承 |
即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(Dog是一个Animal)。 |
实例化 |
创建一个类的实例,类的具体对象。 |
对象 |
通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。 |
类的专有方法如下,类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。
类的专有方法 |
方法说明 |
__init__ |
构造函数,在生成对象时调用 |
__del__ |
析构函数,释放对象时使用 |
__repr__ |
打印,转换 |
__setitem__ |
按照索引赋值 |
__getitem__ |
按照索引获取值 |
__len__ |
获得长度 |
__cmp__ |
比较运算 |
__call__ |
函数调用 |
__add__ |
加运算 |
__sub__ |
减运算 |
__mul__ |
乘运算 |
__truediv__ |
除运算 |
__mod__ |
求余运算 |
__pow__ |
乘方 |
典型的类示例
class People:
name = ''
__age = 0
def __init__(self, n, a):
self.name = n
self.__age = a
def speak(self):
print("%s say: I am %d years old." %(self.name,self.__age))
p = People('shenzhen', 38)
p.speak()
其中, People为类名,p为类的实例,name为类变量,__age为私有实例变量,__init__(self, n, a)为构造函数,speak为类内普通函数。
示例代码运行结果:
类的继承
继承是类的最重要的一个特性,类的继承语法如下:
class DerivedClassName(BaseClassName1):
<statement-1>
.
.
.
<statement-N>
继承示例代码如下:
class People:
name = ''
age = 0
def __init__(self, n, a):
self.name = n
self.age = a
def speak(self):
print("%s say: I am %d years old." %(self.name,self.age))
class Student(People):
grade = ""
def __init__(self,n,a,g):
People.__init__(self,n,a)
self.grade = g
def speak(self):
print("%s say: I am %d years old, and I am in %d grade"%(self.name, self.age, self.grade))
p = People('shenzhen', 38)
p.speak()
s = Student('xiaoming', 10, 3)
s.speak()
在例子中Peple类为基类,Student类为继承Peple的子类,在Student类中的构造函数中调用了父类的构造函数,并且子类重写了父类的方法speak。
示例运行结果如下:
多重继承
一个类可以继承多个类,这叫多重继承,多重继承的语法如下:
class DerivedClassName(Base1, Base2, Base3):
<statement-1>
.
.
.
<statement-N>
多重继承示例代码:
class People:
name = ''
age = 0
def __init__(self, n, a):
self.name = n
self.age = a
def speak(self):
print("%s say: I am %d years old." %(self.name,self.age))
class Student(People):
grade = ""
def __init__(self,n,a,g):
People.__init__(self,n,a)
self.grade = g
def speak(self):
print("%s say: I am %d years old, and I am in %d grade"%(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("I am %s, I am a speaker, my topic is %s"%(self.name,self.topic))
class Sample(Speaker, Student):
a =''
def __init__(self,n,a,g,t):
Student.__init__(self,n,a,g)
Speaker.__init__(self,n,t)
p = People('shenzhen', 38)
p.speak()
s = Student('xiaoming', 10, 3)
s.speak()
sp = Speaker('Jack', 'Python Programming')
sp.speak()
test = Sample("Tim",25,4,"Python3 Programming")
test.speak()
在上例中,Sample类继承了Student和Speaker类,然后调用了父类的speak方法,因为两个父类都有这个方法,默认调用的是在括号中排前地父类的方法。
示例运行结果如下:
如果你喜欢这篇文章,别忘了点赞和评论哦!