PYTHON 类定义,属性,初始化
为了代码的编写方便简洁,引入了类的定义;
一般,使用 class 语句来创建一个新类,class之后为类的名称(通常首字母大写)并以冒号结尾,例如:
类中可以定义所使用的方法,类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self;
类定义
关键词 class
#类定义 class 类名:
class My_class:
pass
#实例
cl = My_class()
#cl就是My_class类的一个实例
类名,一帮情况下首字母需要大写。
类是一个存档独立变量(属性、方法)的空间。
采用运算符点"."调用类的属性或者方法
#定义一个My_class的类
class My_class:
var = "id" #var就是类的属性
def test(self): #test函数就是类的方法,参数self称为实例方法
print('类方法')
#实例化类并调用类的属性和方法
cl = My_class()
print(cl.var) #调用类属性
cl.test() #调用类方法
类与实例之间的关系:
类:是一类事物的抽象,不是真是存在的。
描绘了该类事物的共性,
例如:“人”、“动物”、“家具”
实例:
某类事物的具体个体,是该类事物的具体表现,它是真实存在的。
例如:‘张三’是具体的某个“人”,
‘ 李四’也是具体的某个“人”。
张三和李四就相当于人这个类的实例。
实例化对象既能访问实例属性,也能访问类属性,而类没有实例化则只能访问类属性。
类的私有属性
class My_class:
var = "id" #var就是类的属性
_name="小明" #一个"_"下划线,私有
__age=18 #二个"_"下划线,私有
一个"_"下划线,是私有属性,类外可以调用,约定成俗的私有。
二个"_"下划线,强制私有属性,类外无法调用。
类方法
“方法”就是封装在类里的一种特殊的函数,
#定义一个My_class的类
class My_class:
def test(self): #test函数就是类的方法,参数self称为实例方法
print('类方法')
#通过类实例化调用类方法
cl = My_class()
cl.test()
函数test加一个参数self表示类的实例方法,表示的是“实例”的行为,如果不加self,那么实例调用类方法会出错。
调用类的实例方法,和函数的传参一样,只是会先传一个自身的实例self。
self相当于实例本身,带self的方法成为实例方法,这样实例可以调用,不戴self的方法只有类本身才能调用。
类的初始化和析构
在Python中有很多以双下划线开头且以双下划线结尾的固定方法。
他们会在特定的时机被触发执行。
初始化
init 就是其中之一,它会在实例化之后自动被调用。以完成实例的初始化。
class My_class:
def __init__(self,name): #初始化方法
self.name = name #初始化类的属性
def test(self): #test函数就是类的方法,参数self称为实例方法
print('实例名字是:{}'.format(self.name)) #使用类的属性
#实例化,因为init方法有一个参数name,所以实例化的时候需要传递一个参数
#因为实例化的时候会自动调用__init__方法。
cl=My_class('张三')
cl.teat() #调用test方法
init方法参数的传递过程
- 实例化:产生一个类的实例
- Python自动调用:实例.init(参数)
- 转换为:类.init(实例,参数)
#第一步
cl=My_class('张三') #创建一个实例
#第二步
cl.__init__('张三')
#第三步
My_class.__init__('张三')
析构
类在实例化的时候,可以做一些初始化操作,那么当实例被销毁的时候,同样可以调用销毁方法来销毁实例。
__del__就是一个析构函数了,当使用del 删除对象时,会调用他本身的析构函数。
提示开发者,对象被销毁了,方便调试。
进行以写必要的清理工作。
class My_class:
def __init__(self,name): #初始化方法
self.name = name #初始化类的属性
def test(self): #test函数就是类的方法,参数self称为实例方法
print('实例名字是:{}'.format(self.name)) #使用类的属性
def __del__(self): #析构方法(销毁方法)
print('对象被销毁:{}'.format(self.name))
#实例后调用del销毁对象
cl=My_class('张三')
cl.teat() #调用test方法
del cl #销毁实例对象
#此时若再次调用实例方法会报错
cl.teat()
当没有一个变量指向某个对象的时候,Python会自动销毁这个对象,以便回收内存空间。
del 关键字,可以删除一个变量的指向。