python--类
python时一门面向对象的高级语言,所以类对于python时十分重要。
类定义
class Person: #定义一个名字为Person的类。
pass
esp = Person()#实例化一个类。esp是Person类的一个实例名。
类 :是一个独立存放变量(属性/方法)的空间,使用运算符' . '来调用类的属性和方法。
class Person:
name = 'python'
age = 18
per = Person()
per.name #调用name属性。封装在class内部的属性。
Person.name = 'hello world' #修改封装的属性。
per.name #调用修改后的name属性。
在查找类属性时,python先查找实例,在实例中查找属性,在找不到的情况下,会到类内部去查找。
类与实例之间的关系。
类是一类事务的抽象,不是真是存在的,他描绘了事务的共性。如:人,桌子,动物等
实例是某事务的个体,是具体到某一个事务的表现,是真实存在的。
实例也是一个独立存放变量的空间。每一个实例都是独立的变量空间,不同实例之间的变量空间是互相不可见的。
class Person: #定义一个Peson的类
pass
tom = person() #实例化Person类,tom是Person类的一个实例,是一个真实存在实例,特指tom本人。
Jack= person() #实例化Person类,jack是Person类的一个实例,是一个真实存在实例,特指jack本人。
tom.name = 'python' #后来封装在类中的属性
jack.age = 18 #后来封装在类中的属性
print(tom.name) #正常调用
print(jack.age) #正常调用
print(tom.age) #报错,在类里面找不到属性,实例中也找不到。
print(jack.name) #报错,在类里面找不到属性,实例中也找不到。
print(Person.sex) #报错,在类里面找不到属性,不会去实例中找。
私有属性
在python中有两种私有属性,分别是,在属性前面加一个 _ 和两个 _(下划线)
一个下划线时外部可以访问,两个下划线时外部不可以访问,(相对而言)
class Person:
_age = 19
__sex = '男'
tom = Person()
tom._age #可以调用。
tom.__sex #报错,不可直接访问__sex属性。可以dir(tom),查看tom的方法,里面会有访问__sex的方法。访问方法为 tom._Person__sex
python 中,和_的使用更多时一种规范/约定,没有真正限制的目的。定义在类中的私有属性,也可以被子类继承。
方法
方法时封装在类里的特殊函数
class Person:
def eat(self): #在类里定义 eat 方法
print('在吃东西')
tom = Person() #实例化一个类
tom.eat #实例调用eat方法
实例方法表示实例的一个行为。和函数的传参一样,会传一个自身的实例self
通常会将那个默认传入的参数命名为 self 用来表示调用这个方法的实例对象本身。
方法总是定义在类中,但是却叫‘实例方法’,因为他表示该类的所有实例所共有的行为。
类的初始化与析构
前面说的实例化,都是在类建立后才去添加实例属性,那么有没有办法在实例化的时候就直接添加属性呢。
python有很多 __ xxxx__ 的方法,他们会在特定时间被触发执行,__ init__就是其中之一,他会在实例化后自动调用,以完成实例化的初始化。
class Person:
def __init__(self,name,age):#初始化方法
self.name = name
self.age = age
def eat(self):
print(self.name+'在吃东西')
tom = Person('jack',18) #实例化时候需要传入参数
tom.eat #调用eat方法
__ init__的参数传递过程:
| 实例化产生一个类的实例 |>>>>| python自动调用实例.__ init__(参数) |>>>>| 转换为 类.__ init__(实例,参数) |
析构
前面讨论了实例化的时候的一些操作,那么当实例被销毁了,是否可以做什么。
通常在实例被销毁的时候,会执行怎么样的任务。
__ del__就是一个析构函数,当使用 del 删除对象时,会调用本身析构函数,提醒开发者,对象被销毁了,方便调试,进行一些清理工作。
class Person:
def __init__(self,name):#初始化方法
self.name = name
def __del__(self):#析构方法(销毁方法)
print(self.name,'被销毁了。。。')
tom = Person('jack')
del tom#打印出被销毁
python中,当没有一个变量指向一个对象时,python会自动销毁这个对象,以便收回内存空间。del 关键字,可以删除一个变量的指向。
class Person:
def __init__(self,name):#初始化方法
self.name = name
tom = Person('jack')
del tom#打印出被销毁