WithCoderWithCoderWithCoder

Python 类class简介

    与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简介