Basic
什么是面向对象?
面向对象是一种编程范式,也是程序开发的一种方法,一般面向对象包含三个东西,数据,属性,对象
- 类:定义一件事物的抽象特点、数据以及对数据的操作
- 对象:基于类实例化产生的对象(实例),它会比类更加具体
什么是类、对象、实例?
- 类:代表一类对象,可以实例化成实例
- 对象:在Python中一切皆对象,所以在Python是不强调对象的
- 实例:是由类实例化而来的
类和对象的区别
- 系统给对象分配内存空间,而不会给类分配内存空间
- 因为对象是具象的,而类是抽象的,系统不可能给抽象的东西分配空间
类如何实例化成实例的?
__init__
并不是类实例化成实例时调用的第一个方法
实例化时第一个调用的方法是__new__
方法,__new__
方法在调用后会产生self
对象,然后将self对象传递给__init__
函数,__init__
方法继而完成对象的初始化,所以__init__
并不能算是构造函数
class Person:
def __new__(cls, *args, **kwargs):
pass
def __init__(self, *args, **kwargs):
self.args = args
self.kwargs = kwargs
__new__
方法通常不写,只有在需要改变创建实例的行为时,才会显式定义,比如单例模式
self是什么?
self
是实例本身,是由实例化的过程中__new__
方法基于自身类所产生出来的
为什么需要定义方法是需要写self
为什么self不需要传参数?
self参数有python解释器自动传入的,self代表的是实例的本身,通常命名为self
实例化类的时候,传递的参数列表是除了__init__
方法第一个参数之外的参数,支持函数的所有参数变化
__init__是否是必须写的?
不是,当没显式的定义__init__
就会使用使用默认的__init__
方法,但是通常来说我们会通过自定义__init__
方法来满足自己的程序需求
def __init__(self)
pass
实例的唯一性
唯一是指每一个实例所指向的内存是不一样的,这就是唯一性的体现
- 所有类都是type或者type子类的实例