单继承
1. 类默认要继承 (object)
2. 子类继承通过(父类)完成
3. 子类继承父类的非私有 属性 和 方法
4. 子类中 方法和属性,避免和 父类同名
单继承
代码重用, 父类-子类
class Animal(object):
class Dog(Animal):
子类->父类->父类->父类 (子类拥有连续的父类所有属性和方法)
子类获得父类的(私有属性,和私有方法) 密码。
多继承
class Base(object): #带 object属于‘新式类’ ,不带系统默认也有,但是属于快过时的经典类。
#所以,建议 基础类都要带着(object)
class A(Base):
class B(Base):
class C(A,B): #多继承,逗号连接,多个
注意:
多继承,方法重写的情况下,具体执行哪一个;
类名.__mro__ # (查询类的调用过程) C.__mro__
尽量不要在类里边出现相同的方法
多继承
1. 子类(父类1,父类2, …………)
2. 父类方法出现相同名字, 优先访问,靠前继承的父类方法
3. 其他规则,参考 单继承
4. 通过 类名.__mrc__ 查看 系统调用类的顺序
重写;子类调用父类方法:
1. 子类方法名称与父类方法名称相同,实现内容不同,重写
父类名.方法名(self,参数)
super(子类名, self).父类方法名(参数)
super().父类方法名(参数)
实例/类: 属性、方法
实例 属性 : 实例成员方法中 self.定义
实例属性 与 类属性 同名了,会暂时屏蔽掉 类属性;
同名实例属性删除后, 类属性重新可以访问。
类 属性 : 类中直接 定义变量作为类属性,类名.变量 直接访问
实例 方法 :
类 方法: @classmethod (cls)1)类直接调用 类方法; 2) 通过类方法 修改 类属性
argument static
TypeError: say_chinese() missing 1 required positional argument: 'self'
静态方法: @staticmethod (工具类,应用静态方法)
概念
面向过程
具体的每一步骤
面向对象
(Object Oriented Programming,OOP,面向对象程序设计)
class 定义
class Car:
类方法定义
def eat():
pass
属性定义
__init__(self):
c = Car()
id(c) # 获得对象c在内存的地址
__str__(self): # 影响 print 对象 输出的内容
return # 返回什么, print 对象,输出的就是什么
常见错误:
__init__ 里边有型参, 创建类对象时候,不传递对应的实参
创建类对象传递了实参,__init__中 不进行 self对应属性赋值
类对象属性使用, self.属性名
get方法理解
不希望被直接访问,通过控制判断,选择访问
当程序没有明显报错的时候,如何发现程序中的逻辑错误
set方法理解
对于设置的数据进行判断
私有属性 __name
禁止直接被访问 (查询和修改工资的案例)
私有方法 __fun()
禁止方法别外部直接调用(发短信验证码的案例)
私有
属性
无法直接访问,通过get,set操作
方法
发短信案例 - 三维的案例,生孩子的私有方法
__del__(self)
删除对象被调用(对象没有任何引用)
程序结束自动调用
测量对象引用计数方式
import sys
class T:
pass
t = T()
print (sys.getrefcount(t)) #比实际数大一
判断对象是否属于某个类
isinstance(t,T) # 对象t如果属于类T,返回True,否则Flase
多态
两个类,两个对象, 通过函数调用的时候,才知道执行什么方法;
封装、继承、多态
多态
定义时不确定结果
执行时表现不同形态
特点:
1.使代码灵活
2.减少代码冗余
魔法方法
__init__ 初始化(类的初始化方法)
__str__ print 打印实例对象, return
__del__ 删除对象时候会调用,程序结束时调用
__new__ 实例对象新开辟空间,或者创建
重写
多态的练习
网友评论