开发工具与关键技术:Python IDEL、Python
作者:曾浩源
撰写时间:2019年07月25日
Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的,向对象最重要的概念就是类(Class)和实例(Instance)。
创建一个类和C语言差不多,例如我创建一个常见的例子,动物(Animal)类:
class Animal:
pass
虽然是个空的类,但创建一个类就是这么简单。
接下来就是实例化该类:
创建实例是通过类名+()实现的,可以看到,变量cat指向的就是一个Animal的object,后面的0x000001717F2E9A20是内存地址,每个object的地址都不一样,而Animal本身则是一个类。
像这种属性,在C语言的时候有一个叫构造函数的东西,可以为类提前设置一些属性,到时候实例化的时候直接复制就行了,当然Python也可以,就是使用Python的内置函数(一般前后拥有双下划线的函数都是Python的内置函数)__init__()
如:
class Animal:
def __init__(self,name,age):
self.name = name
self.age = age
和java或C语言差不多,但这self是什么?
和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,并且调用时,不用传递该参数。除此之外,类的方法和普通函数没有什么区别,所以,你仍然可以用默认参数、可变参数和关键字参数。
self 是一个形式参数,当执行 cat = Animal(‘cat’, 18 ) 时,self 等于 cat
当执行 dog = Animal(‘dog’, 78 ) 时,self 等于 dog
类除了定义属性以外,还有函数呀,创建类里的函数刚刚说了,第一个函数永远是self,那么就定义一个函数:
class Animal:
def __init__(self,name,age):
self.name = name
self.age = age
def sleep(self):
print('我睡着了!')
如何使用类里的属性?之前说的self就派上用场了。
class Animal:
def __init__(self,name,age):
self.name = name
self.age = age
def sleep(self):
print('我是' + self.name + ',大家晚安!')
面向对象语言都一样,都有以下的特点:
1、类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
2、类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
3、数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
4、方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
5、实例变量:定义在方法中的变量,只作用于当前实例的类。
6、继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,素以Dog也是一个Animal。
7、实例化:创建一个类的实例,类的具体对象。
8、方法:类中定义的函数。
9、对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
Python类小结:
类是创建实例的模板,而实例则是一个一个具体的对象,各个实例拥有的数据都不相同;
通过在实例变量上调用方法,我们就直接操作了对象内部的数据,但无需知道方法内部的实现细节。
和静态语言不同,Python允许对实例变量绑定任何数据,也就是说,对于两个实例变量,虽然它们都是同一个类的不同实例,但拥有的变量名称都可能不同:
这些是什么?这些就是面向对象的三大特征之一的封装。
搞懂了这个,那么三大特征里的继承也就轻而易举。