目录
一切皆对象,一切对象也各有自己的类型,如同宇宙万物,每一个个体都有属于自己的类,就如我们属于人类,我们的每个个体就属于一个单独的对象。python中的对象也有属于各自的类,而类又规定了这一类对象都具有的属性和行为,那么属于这一类的对象就都具有这个类的属性和行为。如int整数类型,str字符串类型.......这些是python内置的一些类,python还允许我们自己定义对象的类型。
类和实例
创建类
语法格式:
class 类名:
属性行为
类名的写法规则:下划线法、大小驼峰法
实例
类的实例即类的对象,通过实例化方法创建一个实例对象:obj = 类名()
在类名后面添加括号就是由这个类实例化出一个对象,但是一个类可以实例出无数个对象,它们都是独立存在的,为了方便使用,我们需要给每一个实例出的对象命名,让他们又属于自己的对立空间。
属性和方法
属性
类属性
所有属于这类的对象都共有的属性,属于这一类的对象都可以访问到,定义在方法外面,一般写在类名下面。
实例访问类属性的方法:对象名.属性名
实例属性
每个实例对象所具有的属性,称之为类的实例属性,每个实例对象所具有的实例属性属于它所特有,其他同类的对象不能访问。每一个实例都只一个独立的变量空间,不同实例之间的空间互不可见。
实例属性通常定义在类的初始化方法__init__中。
对于已经实例好的对象,可以通过追加的方法添加实例属性,可在定制属性访问中查看。
私有属性
属性名前加一个下划线:在类的外面对象可以直接访问
属性名前加两个下划线:在类的外面对象不能直接访问,访问的方法:对象名._类名__私有属性名
方法
类方法:定义在类中的函数,函数的参数为cls。
实例方法:实例方法在定义的时候需要指明实例参数,这个实例参数为实例本身,通常用self作为参数返回实例,当然也可以自己定义其他参数来代替self,如用this等。
私有方法:在实例方法的方法名前面添加两个下划线,外部不能调用私有方法。
魔法方法
Python中以双下划线开头且以双下划线结尾的方法函数。
初始化方法:__init__(self)
在实例生成的一瞬间就会自动执行的方法。通常会在__init__()方法中执行一些初始化的动作,主要就是创建实例属性。
析构方法:__del__(self)
使用del删除通过这个类实例化的对象时就会调用这个方法,当没有一个变量指向某个对象的时候,python会自动销毁这个对象,并回收释放内存空间。del关键字用来删除一个变量的指向。
class Person:
def __init__(self,name):
self.name = name
def __del__(self):
print(f'{self.name}这个对象已经被销毁')
a = Person('小明')
del a
运算方法
__add__(self,other) # +
__sub__(self,other) # -
__mul__(self,other) # *
__truediv__(self,other) # /
__mod__(self,other) # %
__iadd__(self,other) # +=
__isub__(self,other) # -=
__radd__(self,other) # 反加(后面的对象加前面的对象)
__rsub__(self,other) # 反减(后面的对象减前面的对象)
__imul__(self,other) # *=
__imod__(self,other) # %=
__pow__(self,other) # **
打印方法
__repr__(self)
打印,转换,使用这个魔法方法打印出的结果带有引号,命令交互模式下,直接输出的内容,调用的就是__repr__()的返回值,python中使用repr函数时调用的就是这个方法。
__str__(self)
print打印对象的时候,调用的是str函数,如果对象中没有__str__()方法,则会调用__repr__()方法来处理。
类的查询方法
__class__ # 查看类名:实例.__class__
__dict__ # 查看所有属性,以键和值的形式返回:实例.__dict__
__doc__ # 查看对象文档:实例.__doc__
__bases__ # 查看父类(所有直接父类):类名.__bases__
__base__ # 查看父类(当前父类,第一个父类):类名.__base__
__mor__ # 查看所继承的所有类:类名.__mro__
实例调用方法
__call__方法 # 实例不能像函数一样被调用,要调用实例就要定义__call__方法
class C():
def __init__(self,name):
self.name = name
def __call__(self):
print('===对象被调用===')
pass
c = C('小明')
c()
序列方法
__len__(self) # 获取长度(适用于set和dict)
__setitem__(self) # 按照索引赋值
__getitem__(self) # 按照索引取值