多态

多态

概念

一个事务的多种体现形式
定义是的类型和运行时的类型不一致,当确定类型数据之后,才能确定能够调用那个函数或者访问那个变量

注意:继承是多态的前提
优点:简化代码

使用

#需求:人饲养动物园里的动物

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文件,而不是执行源代码

只需要将

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值