NB的面向对象
-
对象的本质
对象的本质就是对数据和函数的一种整合,或者说对象就是一个盛放数据与函数的容器。
(补充:所有的程序都是由“数据”与“功能”组成的,因而编写程序的本质是定义一系列的数据和 一系列的功能来对其进行操作,在学习对象之前,数据与功能是分开的,在学完对象之后,数据 与功能就能整合到一起了) -
面向对象编程的方法与好处
方法:面向对象编程就是造出一个个对象。把原本分散的,相关的的数据与功能整合到一个个对 象里。这么做既方便使用,也可以提高程序的解耦合作用,从而提高了程序的可扩展性。 -
类的本质
如果说对象是用来存放函数据与函数的容器,那么类就是存放多个对象相同数据与函数的容器 -
类与对象在编程中的关系
在编程中我们需要先定义类,然后通过调用类产生对象,调用类产生的返回值就是对象。生产对象的类与产生的对象之间存在关联,关联是指对象可以访问类中的数据与功能,所以类中的数据仍然属于对象,类只不过是节省空间,减少代码冗余的一种方式,面向对象编程的核心仍然是使用对象。 -
如何定义一个类
class 类名: 类体
类命名的方法>>>驼峰体(每个单词的首字母大写,单词将无需空格)
类体最常见的是函数和变量的定义,但其实类体可以包含任意pyhton代码
类体代码在定义阶段就可以执行,因而会产生新的名称空间存放类中定义的名字
class要小写,类名后面不用加括号,末尾要加冒号
-
如何查看容器内盛放的东西的方法?
""" 类名.__dict__ """
-
如何产生一个对象
# 调用类的过程称为将类实例化,拿到的返回值就称为对象,或称为一个实例
-
如何调用类
""" 类名() """
-
初始化对象的方法
# 在类体内定义一个__init__的函数,就可以在实例化的过程中定制各个对象的独自数据 def __init__(self,参数1,参数2,……,参数n): self.参数1 = 参数1 self.参数2 = 参数2 …… self.参数n = 参数n # 注意点:__init__函数只在被调用阶段执行,在类定义阶段不执行 # __init__的函数返回值只能是None,不能是其他值,否则会报错 # stu1的产生过程来分析,调用类会产生一个空对象stu1,然后将stu1连同类调用时括号内的参数一起传给 Student2.__init(stu1,'小明','19')
-
绑定
类中的函数分为两大类,绑定方法与非绑定方法。其中绑定方法又分为绑定到对象的对象方法和绑定到类的类方法。在类中正常定义的函数默认是绑定到对象的,而为某个函数加上装饰器@classmethod后,该函数就绑定到了类。类方法通常用来在__init__的基础上提供额外实例化的方式。
补充:绑定到类的方法就是给类用的,但是其实对象也可以用,只不过自动传值的第一个参数仍然是类,也就是说这种调用是没有意义的,并且容易引起混淆。
-
非绑定方法(静态绑定)
非绑定方法:为类中的某个函数加上装饰器@staticmethod后,该函数就变成了非绑定方法,也称为静态方法。该方法不与类或对象绑定,类与对象都可以用来调用它,但它就是一个普通的函数而已,因而没有自动传值一说。
总结:若类中需要一个功能,该功能的实现代码中需要引用对象则将其定义成对象方法,需要引用类,则将其定义成成类方法,无需引用类对象则将其定义成静态方法。
-
隐藏属性
在变量名或者函数名前面加上__,就可以将其进行隐藏。对于被隐藏的内同,在类定义阶段就发生了语法上的变形:_类名__属性名隐藏是对内不对外的。而且只有在定义阶段发生变形,其他情况不发生变形。
类里面的隐藏属性的作用是,不直接让外部使用,但可以通过接口可以使用,从而达到对外部数据的严格控制 -
property装饰器
python专门提供了一个装饰器property,可以将类中的函数“伪装成”对象数据属性,对象在访问该数据属性时会触发功能的执行,然后将返回值作为本次访问本次的结果。