python学习12类
引入:
按照编程方法的不同可以分为面向过程的编程和面向对象的编程。
面向过程的编程(PO)是一种以过程为中心的编程方法。编程思路的核心是一个个实现相关功能的过程,围绕这些过程,实现某些特定的要求。程序员是从“过程”看问题,解决问题的。
面向对象的编程(OO)是一种对现实世界理解和抽象的方法。这里把现实世界里的任何事物都可以当作一个相对独立的对象来对待,也可以是抽象的事情。将现实世界的事物进行抽象,就出现一种新的可以高效利用的数据类型—类。
1.类:具有相同特性和行为的对象抽象为类
属性——》变量
行为——》方法(函数)
class:关键字
#定义立方体的类,类中有属性(长,宽,高),行为(求体积)
class Box1():
'''
类文档说明
'''
def __init__(self,length1,width1,height1): #传递类参数的保留函数__init__
self.length=length1
self.width=width1
self.height=height1
def volume(self): #求体积
return self.length*self.height*self.width
#类进行实例化
my_box1=Box1(10,10,10)
print(my_box1.volume())
分析上述代码:
1) 类开始第一行代码:class 类名():
2) 类文档说明:三引号成对引用说明内容,使用方法与函数的文档说明一模一样
3) __init__():叫构造方法,这个方法不对实例显示。而其它自定义方法都可以被实例调用。
4) 保留函数:读者不能用其它函数代替该函数的作用,包括函数名的写法,必须严格按照__init__格式输入。
def __init__(self)的作用:(1)所有类需要实例化,必须现在类里声明__init__函数,不然类的实例无法使用。所有的实例可以调用的属性,必须在__init__定义并初始化,通过self传递。
self关键字:在实例使用时,用于传输实例对象,其实传递的就是实例对象在内存中的一个地址。self参数是隐性传递的,在实例化赋值过程中自动进行。
(2)__init__初始化实例相关参数作用。类在实例化的同时,会调用init函数,所以可以通过他初始化属性值。
__init__方法
1.带有两个下划线开头的方法:声明该方法或属性为私有, 不能在类外部被使用或直接访问。
2.init方法支持带参数的类的初始化,也可为声明该类的属性
3.init方法的第一个参数必须是self,后续参数则可以自定义。
4.self参数:在类中,需要访问当前的实例中的属性和方法的
5.关于保留函数__init__,不能用其他函数代替该函数的作用。
6.方法的重要性:所有的类都需要实例化,必须在类中声明__init__函数,不然类的实例无法使用
2.实例:
把类通过一个等号=赋值给一个变量的过程,这个过程叫实例化,这个变量就是实例,实例的核心是由属性和方法组成的
多实例:同一个类可以给多个实例对象赋值,那就是多实例,每个实例之间互不干扰。
实例的属性和方法通过.点号来调用
3.类的属性
属性是通过__init__函数定义,并通过self传递给实例的一种数据类型。
1)属性值初始化
(1) 在__init__里直接初始化值
#属性值初始化
#__init__里直接初始化
class Box():
def __init__(self):
self.length=10
self.width=10
self.height=10
#实例化
box1=Box()
#调用实例的属性
print(box1.width)
(2) 传递参数初始化
#传递参数初始化
class Box1():
def __init__(self,length1,height1,width1):
self.length=length1
self.height=height1
self.width=width1
#实例化的过程中赋初值(进行初始化)
box1=Box1(10,20,30)
#调用实例的属性
print(box1.width)
2)属性值修改
(1)直接修改
(2)通过自定义方法修改属性值
#属性值初始化
#__init__里直接初始化
class Box():
def __init__(self):
self.length=10
self.width=10
self.height=10
def setNewWidth(self,width1): #修改属性值的方法
self.width=width1
#实例化
box1=Box()
#调用实例的属性
print(box1.width)
#修改属性值
box1.width=20
print(box1.width)
#通过方法修改属性值
box1.setNewWidth(30)
print(box1.width)