文章目录
多态
概念
一个事务的多种体现形式
定义是的类型和运行时的类型不一致,当确定类型数据之后,才能确定能够调用那个函数或者访问那个变量
注意:继承是多态的前提
优点:简化代码
使用
#需求:人饲养动物园里的动物
class Person(object):
# def feeddog(self,dog):
# dog.eat()
# def feedcat(self,cat):
# cat.eat()
# def feedmouse(self,mouse):
# mouse.eat()
#多态的优点:可以简化代码
def feedanimal(self,ani):
print(type(ani))
ani.eat()
class Animal(object):
def __init__(self,name):
self.name = name
def eat(self):
print(self.name + "eating")
class Dog(Animal):
pass
class Cat(Animal):
pass
class Tiger(Animal):
pass
class mouse(Animal):
pass
p = Person()
d = Dog("aaa")
p.feedanimal(d)
c = Cat("bbb")
p.feedanimal(c)
获取对象信息
type():获取一个对象的类型
int,str,bool,float等都是系统提供的类
print(type(123)) # <class 'int'>
print(type("abc")) #<class 'str'>
print(type(True)) #<class 'bool'>
print(type(type(True))) #<class 'type'>
# type类型用来比较
print(type(123) == type("123")) # False
print(type(123) == int) #True
# 获取函数类型:借助于types模块
import types
def func():
pass
print(type(func) == types.FunctionType) # 自定义函数
print(type(lambda x:x) == types.LambdaType) # 匿名函数
print(type(abs) == types.BuiltinFunctionType) # bif
print(type(x for x in range(4)) == types.GeneratorType) #生成器 # 全返回 True
isinstance():判断一个对象是否属于指定的类型
# isinstance(),返回结果布尔值,一般结合if语句
print(isinstance(123,int))
print(type(123) == int)
print(isinstance([1,2,3]),(list,tuple,dict)) # True
print(type([1,2,3]) in (list,tuple,dict)) # True
dir():获取一个对象中的全部信息
# dir(),返回一个对象的所有信息【属性或者函数】
# 注意:返回一个列表,其中的元素为指定对象的信息的字符串
print(dir("abc"))
print(dir([1,2,3]))
print(len("hello"))
print("hello".__len__()) # 等价,第二个时计算机处理时的调用
类中特殊属性和方法【划重点】
1.类属性和实例属性
【面试题:类属性和实例属性的区别】
a.定义的位置不同:类属性直接定义在类中,实例属性在构造函数中【包含动态绑定的属性】
b.访问方式不同:类属性可以通过类名或者对象访问,实例属性一般通过对象访问
c.在内存中出现的机制不同:类属性随着类的而家在而出现,实例属性
d.优先级不同:当类属性和实例属性重名的时候,使用对象访问,优先访问的是实例属性
2.类方法和静态方法
类方法:在一个方法的前面使用@classmethod修饰
静态方法:
3.类常用属性
name 通过类名访问,获得当前类的类名字符串
dict 通过类名访问,获取的是指定的类的信息【类方法,类属性】
通过对象访问,获取的对象的信息
bases
运算符重载
重写:override
重载:overload
在python中,重写和重载都是为了将一个已经存在的函数实现重新实现,只不过重写必须以继承的方式
单例设计模式【划重点】
1. 案例
2. 概念
什么是设计模式:
经过总结,优化,对我们经常遇到的问题作出的可重用的解决方案
设计模式更加高级,相当于解决特定问题的模板,设计模式不会绑定特定的编程语言
常用的设计模式有23种,常用的是单例设计模式,工厂设计模式,生产者消费模式,代理委托设计模式等
什么是单例设计模式?
单个实例,单个对象
程序在运行过程中,只要确保某一个类只能创建一个对象,不管在该程序的那个模块中获取该对象,获取的都是同一个对象
单例设计模式的核心:一个类有且只有一个实例,并且改改实例可以应用在整个项目中
3.实现
3.1模块
python中的模块就是一个天然的单例,因为模块第一次被导入的时候,会生成一个.pvc文件,当第二次导入时,就会直接加载.pvc文件,而不是执行源代码
只需要将