一切皆对象
类的名称:类名
类的属性:一组数据
类的方法:允许对类进行操作的方法(行为)
实例化
属性赋值
方法调用
定义类的方法时,第一个参数一定是self。或者说当看到函数传入的第一个参数时self,可以推测这个函数是类的方法。
数据集中到一个对象叫封装。通过对象的属性封装数据。
__init__(self[,…])中的self参数不需要开发者传递,解释器会自动把当前的对象引用传递进去
实例化时解释器会自动调用__new__()构造对象,然后调用__init__()初始化。
在python中方法名如果是__xxxx__()的,那么就有特殊的功能,因此叫做“魔法”方法
当使用print输出对象的时候,如果定义了__str__()方法,将对象转化为字符串输出,即打印出该方法中return的数据,而不是打印对象的内存地址。
根据业务需求抽象出所需要的类
明确每个对象的职责,在类中定义职责所需要的方法
一、类
一切皆对象
类的名称:类名
类的属性:一组数据
类的方法:允许对类进行操作的方法(行为)
实例化
属性赋值
方法调用
定义类的方法时,第一个参数一定是self。或者说当看到函数传入的第一个参数时self,可以推测这个函数是类的方法。
数据集中到一个对象叫封装。通过对象的属性封装数据。
__init__(self[,…])中的self参数不需要开发者传递,解释器会自动把当前的对象引用传递进去
实例化时解释器会自动调用__new__()构造对象,然后调用__init__()初始化。
在python中方法名如果是__xxxx__()的,那么就有特殊的功能,因此叫做“魔法”方法
当使用print输出对象的时候,如果定义了__str__()方法,将对象转化为字符串输出,即打印出该方法中return的数据,而不是打印对象的内存地址。
根据业务需求抽象出所需要的类
明确每个对象的职责,在类中定义职责所需要的方法
一个下划线_x是说在模块导入的时候不会将方法导入
隐藏属性(私有)
self.__xxxx
在类的外部无法被访问。要访问必须回到类中定义一个获取方法。
使用property简化getter和setter操作
隐藏方法(私有)
def __xxxx():
在类的外部无法被调用(原因:名字重整)
在内存中销毁一个对象时python中自动调用__del__()方法
当有1个变量保存了对象的引用时,该对象的引用计数就会加1,反之亦是,删除会减1
当该对象引用计数变为0或程序结束时,会调用__del__()方法
继承与多继承
可以通过调用print(xxx.__mro__)查看多继承下的优先级
重写:子类也定义了与父类相同的方法名,叫做重写,会优先调用子类的方法
当子类的__init__()被重写时,如果仍想调用父类的__init__(),可以添加super().__init__()方法。同样的,有super().__xxx__()方法
(表述有错误吗?)
类属性一旦定义就存在,也分为公共类属性和私有类属性;对象属性只有在对象定以后才有
类方法:方法中的self是类本身,调用方法时传的值也必须是类的公有属性,就是说类方法只能操作类本身的公有字段
class A(object):
@classmethod #类方法一定要在方法的上面加上一个修饰器,类方法的参数xxx(一般用cls,就像对象方法用self),代表当前的类
def test(xxx):
……
xxx.属性 #等同于操作A.属性
……
A.test()
可以在类的方法中修改类属性
静态方法:通过类直接调用,不需要创建对象,不会隐式传递self。
class A(object):
@staticmethod #静态方法,属于类,没有类似self,cls这样的默认传递的参数,可以通过类名来调用
def test():
……
__new__()方法
__new__至少要有一个参数cls,代表要实例化的类,此参数在实例化时由python解释器自动提供
__new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类__new__出来的实例,或者直接是object的__new__出来的实例
__init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其他初始化的动作,__init__不需要返回值
我们可以将类比作制造商,__new__方法就是前期的原材料购买环节,__init__方法就是在有原材料的基础上,加工,初始化商品环节
Chapter11 python进阶——类
一、类
猜你喜欢
转载自blog.csdn.net/weixin_42353109/article/details/80569529
今日推荐
周排行