1.类的定义 class
类 是一个独立存放变量(属性/方法)的空间
类 是一类事物的抽象,不是真是存在的。描绘了该类事物的共性
比如:人、动物、植物(没有特指某个人、动物、植物)
实例 某类事物的具体个体,是该类事物的具体表现,它是真实存在的。
比如:小明 具体指某个 人
格式:
class 类名:
属性名 = 属性 【属性名相当于变量赋值】
def 方法名(self):
print(self.属性名+‘需要输出的方法’)
调用:
实例名 = 类名() 【实例名相当于变量】
print(实例名.属性名)
实例名.方法名()
调用2:
实例名 = 类名()
实例名.属性名 = 属性
print(实例名.属性名)
实例名.方法名()
class Ren: #定义一个类名
xingming = '小明' #属性
def fangfa(self): # 方法,self代表Ren类的本身
print(self.xingming+'是个乖小孩') #直接用类的本身.类自身的属性
ren = Ren()
print(ren.xingming)
ren.fangfa()
结果:
小明
小明是个乖小孩
ren1 = Ren()
ren1.xingming = '小红'
print(ren1.xingming)
ren1.fangfa()
结果:
小红
小红是个乖小孩
class Ren:#定义一个类名
xingming = '小明'#属性
def fangfa(self,tezheng):#方法 特征
print(self.xingming+'是个乖小孩',tezheng)
ren = Ren()
ren.fangfa('而且还狠聪明')
结果:小明是个乖小孩, 而且还狠聪明
“实例方法” 的调用过程与 self
将默认会传入的那个参数命名为self,用来表示调用这个方法的实例对象本身。
方法总是定义在类中的,但是却叫“实例方法”,因为它表示该类所有实例所共有的行为
方法
类中的方法,就是函数
self
代表实例的本身
调用
方法的调用和属性调用一样,通过点操作符调用,传参和函数传参一样
2.私有属性
有两私有属性,分别是在属性前加 一个下换线(_) 和 两个下划线(__)一个下滑线外部可以直接访问,二个下划线外部不可以直接访问。
_和 __ 的使用 更多的是一种规范/约定,没有真正限制的目的定义在类中的私有属性也可以被子类继承。
_
格式:
_属性名 = 属性
调用:
实例名._属性名
跟没有下划线的差别在于直接.是找不到这个属性的。只有你知道有这个私有属性才能查到
__
格式:
__属性名 = 属性
调用:
实例名 = 类名()
print(dir(实例名))
实例名.类名__属性名
class Ren:#定义一个类
_name = '小明'#私有属性
__age = 18#不可查询的属性
ren = Ren()
print(ren._name)
print(ren.__age)
结果:
小明
报错
那怎么查询呢
print(dir(Ren))#查询对象里面有的所有方法和属性
找到__age这个属性
print(ren._Ren__age)
18
3.初始化及析构
3.1. __init__初始化
class Ren:
def __init__(self,name,age):
self.name = name
self.age = age
xiaoming = Ren('小明',15)#实例化一个对象,并传参
print(xiaoming.name)
print(xiaoming.age)
结果:
小明
15
class Ren1:
def fangfa(self,name,age):
print('你的名字叫什么',name,'今年多少岁',age)
xiaohong = Ren1()
xiaohong.fangfa('小红',18)
结果:
你的名字叫什么 小红 今年多少岁 18
不能直接.name和.age,只能.fangfa (定义的这个方法)
3.2.析构 del
就是一个析构函数了,当使用del 删除对象时,会调用他本身的析构函数。
提示开发者,对象被销毁了,方便调试。
进行一些必要的清理工作。
class Ren:
def __init__(self,name,age):
self.name = name
self.age = age
xiaoming = Ren('小明',15)#实例化一个对象,并传参
print(xiaoming.name)
del xiaoming #销毁xiaoming这个实例
print(xiaoming.age)
结果:
小明
报错(把实例化销毁了,就找不到xiaoming这个实例出来)