python-初识面向对象
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多态
• 当子类和父类都存在相同 的run()方法时,我们说, 子类的run()覆盖了父类的 run(),在代码运行的时候, 总是会调用子类的run()。 这样,我们就获得了继承 的另一个好处:多态。 • #多态性:一种调用方式, 不同的执行效果
类的方法
• 类的成员可以分为三大类:字段、方法和属性。
• 公有普通字段:对象可以访问;类内部可以访问;派生类中可以访问
• 私有普通字段:仅类内部可以访问;
例子
类的特殊成员
1、__init__ 构造方法,通过类创建对象时,自动触发执行。
2、__del__ 析构方法,当对象在内存中被释放时,自动触发执行。
3、__str__ 如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法 的返回值。
• 静态方法:由类调用;无默认参数;
静态方法及类方法
• 静态方法仅是类中的函数, 不需要绑定实例, 也就是说静态方法的定义不需要传入 self 参数. 静态方法不属于 类的某一个实例对象, 而是属于类本身, 所以不需要绑定到实例对象. 可以通过 className.staticMethodName 的方式来调用.
• 类方法和实例方法类似, 区别在于前者需要定义 类对象参数 cls 而后者需要定义 实例对象参数 self. 两者在 绑定方法调用中, 都会自动的传递相应的对象到第一次参数 (cls/self) 中. • # 类方法中的 cls 参数表示类对象自身
属性
• 属性的基本使用 • 由属性的定义和调用要注意一下几点:
• @x.deleter表示可读可写可删除。
类成员的修饰符
• 类的所有成员在上一步骤中已经做了详细的介绍,对于每一个类的成员而言都有两种形式: • 公有成员,在任何地方都能访问
• 私有成员,只有在类的内部才能方法
• 私有成员和公有成员的定义不同:私有成员命名时,前两个字符是下划线。(特殊成员除外,例如:__init__、 __call__、__dict__等) • 私有成员和公有成员的访问限制不同: • 静态字段 • 公有静态字段:类可以访问;类内部可以访问;派生类中可以访问 • 私有静态字段:仅类内部可以访问 • 普通字段
类和对象在内存中是如何保存的?
如上图所示,根据类创建对象时,对象中除了封装 name 和 age 的值之外,还会保存一个类对象指针,该值指向当前对 象的类。
2、面向对象三大特性
• 封装 • 封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。所以,在使用面向 对象的封装特性时,需要: • 1)将内容封装到某处 • 2)从某处调用被封装的内容
• 2、属性的两种定义方式
• • • • • • 经典类,具有一种@property装饰器(如上一步实例) 新式类,具有三种@property装饰器 @property可以将python定义的函数“当做”属性访问, 从而提供更加友好访问方式, 但是有时候setter/deleter也是需要的。
1)只有@property表示只读。 2)同时有@property和@x.setter表示可读可写。 3)同时有@property和@x.setter和
对于面向对象的封装来说,其实就是 使用构造方法将内容封装到 对象 中, 然后通过对象直接或者 self 间接获取 被封装的内容。
继承
对于面向对象的继承来说,其实就是将多个类共有的方法提取到父 类中,子类仅需继承父类而不必一一实现每个方法。除了子类和父
类的称谓,你可能看到过 派生类 和 基类
继承的实现原理
• 特点: 只能使用静态变量, 所以始终占用同一个内存, 执行效率更高, 但不会被自动回收.
• 应用场景: 用于处理一些不会经常改变, 但却会被频繁调用的数据。 • #静态成员不能访问非静态成员, 因为非静态成员只有在被调用时才会被加载进内存, 而静态成员是长驻内存且不 会被自动回收的, 所以非静态成员却可以访问静态成员
目录
• 创建类和对象 • 面向对象三大特性(封装、继承、多态) • 类的成员(字段、方法、属性) • 类成员的修饰符(公有、私有) • 类的特殊成员
1、创建类和对象
• • • 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为 程序的基本单元,一个对象包含了数据和操作数据的函数。 在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是 面向对象中的类(Class)的概念。 当一个类定义完之后,就产生了一个类对象。类对象支持两种操作:引用和实例化。引用操作是 通过类对象去调用类中的属性或者方法,而实例化是产生出一个类对象的实例,称作实例对象。
1)字段
• 普通字段属于对象 • 静态字段属于类
• 区别:存储的位置不同
• • 普通字段需要通过对象来访问 静态字段通过类访问
2、方法
• 方法包括:普通方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。 • 普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self; • 类方法:由类调用; 至少一个cls参数;执行类方法时,自动将调用该方法的类复制给cls;
• 定义时,在普通方法的基础上添加 @property 装饰器;
• 定义时,属性仅有一个self参数 • 调用时,无需括号 方法:foo_obj.func() 属性:foo_obj.prop
• 注意:属性存在意义是:访Байду номын сангаас属性时可以制造出和访问字段完全相同的假象
• 属性由方法变种而来,如果Python中没有属性,方法完全可以代替其功能