1.引题
类是抽象的,也称之为“对象的模板”。我们需要通过类这个模板,创建类的实例对象,然后才能使用类定义的功能。
我们前面说过的一个Python对象包含三个部分:
- id(identity识别码)
- type(对象类型)
- value(对象的值)
现在,我们可以更进一步的说,一个python对象包含如下的部分:
- id(identity识别码,一般是存储地址)
- type(对象类型)
- value(对象的值)
- 属性(attribute)
- 方法(method)
创建对象,会首先调用__new__()
构造方法,然后执行__init__()
初始化方法。构造方法创建对象,初始化方法用于执行“实例对象的初始化工作”,即对象创建后,初始化当前的相关属性,无返回值。
2.官方说明
2.1 源码注释说明
class object:
def __init__(self): # known special case of object.__init__
""" Initialize self. See help(type(self)) for accurate signature. """
pass
@staticmethod # known case of __new__
def __new__(cls, *more): # known special case of object.__new__
""" Create and return a new object. See help(type) for accurate signature. """
pass
通过根基类object中源码定义的方法的注释信息可以知道:
__new__()
方法:创建并返回一个新对象__init__()
方法: 初始化self,self代指传入的对象
此处源码指的PyCharm中用于提示代码信息的源码信息,非实际源码,结构基本结构,缺少具体实现。
2.2 实例代码说明
class Student(object):
def __new__(cls):
print("__new__方法被调用")
return super().__new__(cls)
def __init__(self):
print("__init__方法被调用")
执行结果:
__new__方法被调用
__init__方法被调用
通过官方源码以及实例信息,我们大概知道:首先通过__new__()
方法首先来创建对象,然后使用__init__()
方法来进行初始化操作。
具体完整的详细信息,后面的博客会进行详细说明
3.初始化方法要点说明
__init__()
的要点如下:
-
名称固定,必须为:
__init__()
-
第一个参数固定,约定俗成为:self,代指刚刚创建好的实例对象。实际上参数名可以任意修改,不影响使用,但是影响代码的可读性,所以遵循惯例。
class Student: def __init__(s, name, age): """ 使用s代指self,在pyCharm会提示改进信息,但是可以正常执行 """ s.name = name s.age = age s1 = Student("聂发俊", 100) print(s1.name) print(s1.age)
执行结果
聂发俊 100
补充说明:Python中self相当于C++中的self指针,Java和c#中的this关键字,Python中self必须为构造函数的第一个参数。
-
构造函数通常用来初始化实例对象的实例属性。
class Student: def __init__(self, name, age): """ 初始化实例属性 """ self.name = name self.age = age
-
通过“类名(参数列表)”来调用构造方法。调用后,将创建号的对象返回给相应的变量。
s1 = Student("聂发俊", 100)
通过上面的介绍,实际上这里调用了2个方法。
备注:
更多精彩博客,请访问:聂发俊的技术博客
完整markdown笔记,请访问: python400_learn_github