与Java、PHP等多数语言一样,Python也是一门面向对象的语言,在Python中同样很容易的创建一个类和对象。本文不介绍面向对象的概念,只介绍Python的面向对象编程。
在面向对象编程编程中,落地的方式一般是使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。类就是一个模板,模板里可以包含多个函数,函数里实现一些功能。而对象则是根据模板创建的实例,通过实例对象可以执行类中的函数。
一、Python类定义
在Python中,类的语法格式如下:
class ClassName: <statement-1> . . . <statement-N>
类的定义和其他语言一样,都是使用 class 关键字加类名(ClassName)来定义类。类名称第一个字母大写,名称后面可以带括号也可以不带括号。
1.1 类定义说明:
class:定义类的关键字
ClassName:类名字。
statement:类属性(方法、变量等)。
举例如下:
>>> class Person: '''这是一个Peson类''' name = 'neil' def getName(self): return self.name def setName(self,name): self.name = name
1.2 类的方法
在前面的文章中,我们介绍过Python的函数(方法)。在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。(注意:self 不是 python 关键字,我们把他换成其他名称也是可以,不过按照习惯使用 self)
>>> class Person: def say(self): print('hi') >>> p = Person() >>> p.say() hi >>>
如果定义类的方法时不指定self参数,调用方法时,将会抛错“TypeError: funName() takes 0 positional arguments but 1 was given”。
1.3 类的构造函数
Python类有一个名为 __init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用。
>>> class Person: def __init__(self): print('类初始化自动调用构造函数') >>> p = Person() 类初始化自动调用构造函数 >>>
当然, __init__() 构造函数也可以有参数,参数通过 __init__() 传递到类的实例化操作上。
>>> class Person: def __init__(self,name): print('类初始化自动调用构造函数') self.name = name >>> p = Person('neil') # 初始化时需要传参,不然报错 类初始化自动调用构造函数 >>> p.name 'neil' >>>
1.4 类的属性
类对象创建后,类命名空间中所有的命名都是有效的属性名。类实例化后,可以使用其属性;实际上,创建一个类之后,也可以通过类名访问其属性。
>>> class Person: name = 'neil' def getName(self): return self.name def setName(self,name): self.name = name >>> p = Person() # 实例化类 >>> p.setName('james') >>> p.getName() 'james' >>> Person.name # 通过类名访问属性,不受实例对象的影响 'neil' >>>
通过以上代码可以发现,实例化类对象后,每个对象有自己单独的属性值。而通过类名访问的属性值,其值为定义时的初始值,不受实例化对象的影响。
二、类对象(实例化)
在前面的例子中可以看到,Python类对象的实例化,不需要使用关键字new(Python中也没有这个关键字),类的实例化类似函数调用方式。此处不再多说,举例说明:
>>> class Person(): def __init__(self,name): self.name = name >>> p = Person() Traceback (most recent call last): File "<pyshell#82>", line 1, in <module> p = Person() TypeError: __init__() missing 1 required positional argument: 'name' >>> p = Person('neil') >>> p.name 'neil' >>>
需要注意的一点是,当使用构造函数时,如果构造函数带参数,实例化时,需要传递参数,否则实例化将出错。
欢迎分享交流,转载请注明出处:WithCoder » Python 类class简介