python基础——6

目录

 

面向对象编程

         类的定义

         构造函数__init__()  (init前后分别是两个下划线)

          实例属性的内存分析

          实例方法

          其他操作

           类对象

          类属性和类方法

         __del__()方法(析构函数)和垃圾回收机制

         __call__()方法和可调用对象


面向对象编程

面向对象是将数据和操作数据的方法封装到对象中

面向过程考虑的是程序的逻辑流程,适合开发小程序

面向对象思维,适合开发大规模程序

         类的定义

类也称为类对象,类是抽象的,是对象的模板

类的结构:

方法:由同一个类创建的所有对象共享(行为)

属性:每个对象维持自己的属性(状态)

class Student: #类名首字母大写,多单词驼峰原则

         def __init__(self,name,score): #这是构造函数,self必须是第一个参数

                self.name=name

                self.score=score

         def say_score(self):

                print("{0}的分数是{1}".format(self.name,self.score))

s1=Student("abc",10)    #调用的时候,默认把当前的地址赋值给self,之后的“abc”和10依次赋值给name和score

s1.say_score() #调用say_score函数时,参数是self,即上一步的地址,因此self.name和self.score就是之前赋值的"abc"和10

         构造函数__init__()  (init前后分别是两个下划线)

对象包含:

1.id(identity识别码)

2.type(对象类型)

3.value(对象的值)

    (1)属性(attribute)

    (2)方法(method)

创建对象(无需重新定义该方法)后,首先通过__init__()初始化创建后的对象,无返回值

__init__()的要点:

1.名称固定

2.第一个参数固定为self,类里面定义的方法第一个参数都是self,self指的就是刚刚创建好的实例对象

3.构造函数用来初始化实例对象的实例属性

                self.name=name

                self.score=score    #初始化实例属性

实例属性相应的要在构造函数的形参中写出来, def __init__(self,name,score)

4.通过类名调用构造函数  s1=Student("abc",10)

5.,__init__()方法:初始化创建好的实例对象,初始化指的是给实例属性赋值

6.__new__()方法:用于创建对象,一般无需重定义该方法

7.python中的self相当于C++的指针,self必须是构造函数的第一个参数,类里面定义的方法第一个参数都是self,名字可以不叫self,但是一般遵循规则取self

8.如果__init__()只有self一个形参,在类中也可以不写这个构造函数

            实例属性的内存分析

实例属性是从属于实例对象的属性,也称为实例变量

1.实例属性一般在__init__()方法中定义:

self.实例属性名=初始值

2.在本类的其他实例方法中也通过self进行访问:

self.实例属性名

3.创建实例对象后,通过实例对象进行访问:

obj01=类名()#创建对象,调用__init__()方法初始化属性

obj01.实例属性名=值   #新创建和初始化后的对象可以进行该操作,可以给原有属性赋值,也可以新加属性(但是新加属性在类生成的其他对象中是没有的!)

下面我们重新分析本篇最开始的那段代码:

class Student:   #定义类

         def __init__(self,name,score):  #定义构造函数,此时会产生一个内存地址,self相当于地址id,指当前的实例对象,用于指向该地址从而调用里面的属性和方法,name和score是地址里面的实例属性,后面定义的def say_score(self)是地址里面的实例方法

                self.name=name   #定义实例属性

                self.score=score

         def say_score(self):     #定义实例方法

                print("{0}的分数是{1}".format(self.name,self.score))

s1=Student("abc",10)    #通过类名调用构造函数,其实在调用过程中首先通过__new__()方法创建对象,之后通过__init__()方法初始化对象。类相当于模具,会产生一些相似的对象,这时一个新对象就产生了。在这个新对象中,不只包含之前定义的实例属性,还有定义的实例方法(实例方法本质上也是实例属性),以及后续可以增加新的实例属性

s1.say_score()

python基础——6

               实例方法

实例方法也是从属于实例对象的方法

定义格式:

           def 方法名(self,[,形参列表]):

                       函数体

调用格式:

            对象.方法名([实参列表])

要点:

1.第一个参数必须是self,self指

2.调用实例方法时,不需要给self传参,self由解释器自动传参

函数和方法的区别:

1.本质一样

2.方法从属于特定实例对象,通过对象来调用

3.方法需要传递self

               其他操作

1.dir(obj)可以获得对象的所有属性和方法

2.obj.__dic__对象的属性字典

3.pass空语句

4.isinstance(对象,类) 判断对象是不是属于指定类

                类对象

当解释器执行class时会创建一个类对象

class相当于一个模具类,类型为type

class Student 实际上创建了一个名为Student的类对象,可以赋值给其他对象,比如说Stu=Student

之后就可以通过Stu()调用该类

                类属性和类方法

类属性:

类属性从属于类对象,也叫类变量,可以被所有实例对象共享

类属性定义方式:

               class 类名:

                        类变量名=初始值

在类中和类外面,可以通过 “类名.类变量名”来读写

 

类方法:

类方法格式:

                @classmethod

                 def 类方法名cls[,形参列表]:     #def s1(cls,...):

                       函数体

1.第一个cls必须有,它指的就是类对象本身

2.调用类方法格式:

类名.类方法名(参数列表)

参数列表中不需要给cls传值

3.类方法中访问实例属性和实例方法会报错,类方法就是操作类属性的

4.子类继承父类方法时,传入cls是子类对象,不是父类对象

 

静态方法:

与类对象无关,与正常函数没有区别,只是放到类里面,通过类调用

格式:

                  @statticmethod

                  def 静态方法名([形参列表])

                        函数体

静态方法也可以操作类属性

静态方法不能调用实例属性和实例方法

 

                  __del__()方法(析构函数)和垃圾回收机制

实现销毁对象的操作,释放对象占用的资源

当对象没有被引用(引用计数为0)时,由垃圾回收器调用__del__()方法,当程序结束时引用结束,就会自动调用该方法

一般不需要重新定义析构方法,系统会自动通过__del__()方法

可以通过  “del 对象名”这个语句删除对象,会调用__del__()方法

                  __call__()方法和可调用对象