今天继续导师安排的任务,快速学习Python
内容包含:多继承:MRO方法搜索顺序、新式类和旧式类,多态,类属性、类方法、静态方法
多继承
在昨天写的多继承,如果出现重复的属性或者方法,可以使用 MRO方法搜索顺序 来确定解释器对代码的执行顺序
# 确定C类对象的输出顺序 print(C.__mro__) #--------------------- # (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>) # # Process finished with exit code 0 #---------------------
新式类和旧式类
# Python 2.x # 新式类 "object"是所有类的父类 -- 推荐使用 -- class Cat(object): def meow(self): print("喵呜") # 旧式类(经典类) 区别在于"object" -- 不推荐使用 -- class Cat: def meow(self): print("喵呜") # Python 3.x # 无论是否指定"object"为父类,都会使用新式类 class Cat: def meow(self): print("喵呜") # Tips:为了代码可以同时在Python2.x/3.x运行,建议定义类的时候,统一继承自"object" class 类名(object): pass # 创建对象 # 对象 = 类 XiaoHei = Cat() # 调用对象包含的方法 XiaoHei.meow() #----------------- # 喵呜 # # Process finished with exit code 0 #----------------- # 查看对象XiaoHei的属性 dir(XiaoHei) ['__喵__', '__咪__', '__嗷__']
多态
不同的子类对象,调用相同的父类方法,产生不同的执行结果
多态可以增加代码的灵活度
以继承和重写父类方法为前提
是调用方法的技巧,不会影响类的内部设计
多态:让不同的子类对象,调用相同的父类方法,产生不同的结果
class Dog(object): """封装一个犬类""" # 定义一个初始化函数,并且定义一个name属性 def __init__(self, name): self.name = name # 定义普通犬类的玩耍方式 def game(self): print("%s 蹦蹦跳跳" % self.name) class XiaoTianQuan(Dog): """创建一个哮天犬类,重写父类的game""" def game(self): print("%s 在天空遨游" % self.name) class Person(object): # 初始化方法,定义名字属性 def __init__(self, name): self.name = name def game_with_dog(self, dog): print("%s 和 %s 玩耍" % (self.name, dog.name)) # 让犬玩耍 dog.game() # 创建一个犬对象 # wangcai = Dog("旺财") # 创建一个哮天犬对象 wangcai = XiaoTianQuan("飞天旺财") # 创建一个小明对象 xiaoming = Person("小明") # 让小明调用狗玩的方法 xiaoming.game_with_dog(wangcai) #------------------- # 小明 和 飞天旺财 玩耍 # 飞天旺财 在天空遨游 # # Process finished with exit code 0 #-------------------
类属性、类方法、静态方法
实例
对象创建后,内存中就有了一个对象实实在在的存——实例
创建出来的 对象 叫做 类的实例
创建对象的 动作 叫做 实例化
对象的属性 叫做 实例属性
对象调用的方法 叫做 实例方法
类是一个特殊的对象——类对象,也可以定义 类属性 和 类方法
class A: 定义的类属于 类对象
obj1 = A() 利用这个 类对象 创建出来的 对象 叫做 实例对象
程序运行时,类也会被加载到内存
类对象 在内存中只有 一份,实例对象 在内存中可以有 很多份
定义类属性,在类名下方使用赋值语句就可以,使用类属性记录跟类相关的特征,不会记录具体对象的特征。
class Tool(object): """定义一个工具类,并演示类属性""" # 使用赋值语句定义类属性,记录所有工具的数量(调用次数) # 类属性名称 = count = 0 def __init__(self, name): self.name = name # 使用类名调用,每次调用工具类,计数+1 Tool.count += 1 # 创建工具对象 tool1 = Tool("小刀") tool2 = Tool("剪刀") tool3 = Tool("水桶") # 输出工具类的总数(调用次数) # 使用类名输出 -- 推荐使用 -- print("工具对象总数 %d" % Tool.count) # 输出工具类的总数(调用次数) # 使用对象名也可以输出,但是可能会造成混淆 -- 不建议使用 -- print("工具对象总数 %d" % tool3.count) # ---------------- # 工具对象总数 3 # 工具对象总数 3 # # Process finished with exit code 0 # ----------------
转载请注明:逗比根据地 » 实习日记 2020-01-10