Python面向对象进阶教程,Python面向对象进阶知识笔记.doc
《Python面向对象进阶教程,Python面向对象进阶知识笔记.doc》由会员分享,可在线阅读,更多相关《Python面向对象进阶教程,Python面向对象进阶知识笔记.doc(26页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、类方法、静态方法1. 类方法 第一个形参是类对象的方法 需要用装饰器classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数。class Dog(object): _type = 狗 # 类方法,用classmethod来进行修饰 classmethod def get_type(cls): return cls._typeprint(Dog.get_type()使用场景: 当方法中需要使用类对象(如访问私有类属性等)时,定义类方法 类方法一般和类属性配合使用2. 静态方法 需要通过装饰器staticmethod来进行修饰,静态方法既不需要传递类对
2、象也不需要传递实例对象(形参没有self/cls)。 静态方法 也能够通过实例对象和类对象去访问。class Dog(object): type = 狗 def _init_(self): name = None # 静态方法 staticmethod def introduce(): # 静态方法不会自动传递实例对象和类对象 print(犬科哺乳动物,属于食肉目.)dog1 = Dog()Dog.introduce() # 可以用 实例对象 来调用 静态方法dog1.introduce() # 可以用 类对象 来调用 静态方法用场景: 当方法中既不需要使用实例对象(如实例对象,实例属性),也
3、不需要使用类对象(如类属性、类方法、创建实例等)时,定义静态方法 取消不需要的参数传递,有利于减少不必要的内存占用和性能消耗注意点: 类中定义了同名的方法时,调用方法会执行最后定义的方法class Dog: def demo_method(self): print(对象方法) classmethod def demo_method(cls): print(类方法) staticmethod def demo_method(): # 被最后定义 print(静态方法)dog1 = Dog()Dog.demo_method() # 结果: 静态方法dog1.demo_method() # 结果:
4、静态方法_new_和_init_方法class A(object): def _init_(self): print(这是 init 方法) def _new_(cls): print(这是 new 方法) return object._new_(cls)A()总结 _new_至少要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供 _new_必须要有返回值,返回实例化出来的实例,这点在自己实现_new_时要特别注意,可以return父类_new_出来的实例,或者直接是object的_new_出来的实例 _init_有一个参数self,就是这个_new_返回的实例
5、,_init_在_new_的基础上可以完成一些其它初始化的动作,_init_不需要返回值# 实例化一个单例class Singleton(object): _instance = None _is_first = True def _new_(cls, age, name): if not cls._instance: cls._instance = object._new_(cls) return cls._instance def _init_(self, age, name): if self. _is_first: # 不会再创建第二个对象 self.age = age self.na
6、me = name Singleton. _is_first = Falsea = Singleton(18, 张三)b = Singleton(28, 张三)print(id(a)print(id(b)print(a.age) # 18print(b.age) # 18a.age = 19print(b.age)继承的基本使用在现实生活中,继承一般指的是子女继承父辈的财产,父辈有的财产,子女能够直接使用。程序里的继承继承是面向对象软件设计中的一个概念,与多态、封装共为面向对象的三个基本特征。继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。 在程序中,继承描述的是多个类之间
7、的所属关系。 如果一个类A里面的属性和方法可以复用,则可以通过继承的方式,传递到类B里。 那么类A就是基类,也叫做父类;类B就是派生类,也叫做子类。class Animal: def _int_(self): pass 动物类 def sleep(self): print(正在睡觉)class Dog(Animal): Dog类继承自Animal类 def _init_(self): passclass Cat(Animal): # 定义类时,在括号后面传入父类的类名,表示子类继承父类 Cat类继承自Animal类 def _int_(self): pass# Dog 和 Cat 都继承自An
8、imal类,可以直接使用Animal类里的sleep方法dog = Dog()dog.sleep()cat = Cat()cat.sleep()在Python中,继承可以分为单继承、多继承和多层继承。单继承:子类只继承一个父类继承概念:子类用于父类的所有的方法和属性。继承语法:class 类名(父类名): pass 子类继承自父类,可以享受父类中已经封装好的方法,不需要再次定义 子类中应该根据职责,封装子类特有的属性和方法。继承的传递性Dog类继承自Animal,XiaoTianQuan又继承自Dog类,那么XiaoTianQuan类就具有了Animal类里的所有属性和方法。子类拥有父类以及父
9、类的父类中封装的所有属性和方法。思考:XiaoTianQuan能否调用Animal的run()方法? XiaoTianQUan能够调用Cat里的方法?多继承子类可以拥有多个父类,并且具有所有父类的属性和方法。语法格式:class 子类名(父类名1,父类名2.) pass多继承的使用注意事项思考:如果不同的父类中存在同名的方法,子类对象在调用方法时,会调用哪个父类的方法? 说明:开发中,应该尽量避免这种容易产生混淆的情况。如果多个父类之间存在同名的属性后者方法,应该尽量避免使用多继承。Python中的MRO Python中针对类提供了一个内置属性_mro_可以用来查看方法的搜索顺序。 MRO 是
10、method resolution order的简称,主要用于在多继承时判断方法属性的调用顺序。print(C._mro_)输出结果:(, , , ) 在调用方法时,按照_mro_的输出结果从左至右的顺序查找。 如果再当前类中找到方法,就直接执行,不再向下搜索。 如果没有找到,就顺序查找下一个类中是否有对应的方法,如果找到,就直接执行,不再继续向下搜索。 如果找到了最后一个类,依然没有找到方法,程序就会报错。新式类和旧式(经典)类object是Python中所有对象的基类,提供了一些内置的属性和方法,可以时候用dir函数查看。 新式类:以object为基类的类,推荐使用 经典类:不以objec
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 面向 对象 进阶 教程 知识 笔记
限制150内