python 多态这一部分的知识点相关应用

类型这块

type 一个对象的时候,这个对象的类型,总是这个对象所属的类

type任何一个类,它的类型都是type,type是所有数据类型和类的鼻祖

type的类型是它本身 type  = type(type)

函数的类型就是函数

python是一种动态语言,一个鸭子类型举例:动态python变量,在赋值的时候,赋值号(=)右边的数据类(list,set,float等)对象是什么类型,他就是什么类型

a. 常规创造的类 总是有几个特性:

  能够实例化

  能有属性

  能有方法

b.元类能够帮助你创造不同寻常的类(下面就来了)

  不能实例化

  只能有一个实例

类 =type(该类对象)

type = type(类)

所有的类型:说的都是这个对象是属于哪一类的

所有的用class常规语法创造出来的类都是type类型

元类的应用(归一化设计)

归一化设计

  a.方便用户记忆

  b.方便用户使用

python 的归一化设计用的是一下的东西:

from abc import ABCMeta,abstractmethod
class Father(metaclass= ABCMeta):     #抽象类,如果你用了这种,
    def __init__(self,name,price):    #在@abstractmethod方法下面函数,在此类的每一个
        self.name = name              #子函数必须实现该函数,但是在此类此函数可以写一些
        self.price = price            #简单代码,抽象类也不能实例化
    @abstractmethod
    def pay(self):
        pass
class Wechatpay(Father):
    def pay(self):
        print(f‘{self.name}付了{self.price}‘)
class Alipay(Father):
    def pay(self):
        print(f‘{self.name}付了{self.price}‘)
def pay(person):                #归一化设计  就是将zy.pay() = pay(zy)
    return person.pay()         #方便用户记忆
                                #方便用户使用
zy = Wechatpay(‘zy‘,1000)
hfl = Alipay(‘hfl‘,2000)
pay(zy)
pay(hfl)

多变化的抽象类继承


from abc import ABCMeta,abstractmethodclass Normalanimals(metaclass=ABCMeta):    @abstractmethod    def eat(self):        pass    @abstractmethod    def drink(self):        pass
class Flyanimals(metaclass=ABCMeta):
    @abstractmethod
    def fly(self):
        pass
class Swimanimals(metaclass=ABCMeta):
    @abstractmethod
    def swim(self):
        pass
class Tiger(Normalanimals,Swimanimals):
    def eat(self):pass
    def drink(self):pass
    def swim(self):pass
class swam(Normalanimals,Swimanimals,Flyanimals):
    def eat(self):pass
    def drink(self):pass
    def swim(self):pass
    def fly(self):pass

鸭子类型:
python当中写程序的一种特殊的情况
其他语言中 正常的我们说一个数据类型具有某个特点,通常是通过继承来实现
继承迭代器类,来证明自己本身是个迭代器
继承可哈希的类,来证明自己本身是可哈希的
但是所有的这些都不是通过继承来完成的
我们只是通过一种潜规则的约定,如果具有__iter__,__next__就是迭代器
如果具有__hash__方法就是可哈希的
如果具有__len__就是可以计算长度的
这样的数据类型之间的关系并不仅仅是通过继承来约束的
而是通过约定俗成的关系来确认的
list.index()
str.index()
鸭子类型是一种约定俗称的关系,只在python里有
多态:
在传递参数的时候,如果要传递的参数有可能是多个类的对象
我们又必须在于严重清楚的描述出到底是哪一个类型的对象
我们就可以使用继承的形式,有一个父类作为这些所有可能被传递进来的对象的基类
基础类型就可以写成这个父类了
于是所有子类的对象都是属于这个父类的
在python当中,因为要传递的对象的类型在定义阶段不需要明确,所以我们在python中处处是多态
数据类型不需要通过继承来维护统一

命名元组

创建一个不可以更改属性,没有自带方法的类

调用的时候用 from collections import nametuple

对比:通过这个对比,我们知道这个类只能做调用单个参数值,连呈现内容都做不到,看来跟常量性质一样了

from collections import namedtuple

Course = namedtuple(‘Course‘,[‘name‘,‘ad‘,‘hp‘])
python = Course(‘python‘,100,120)
print(python.name)          #只能这样做
# print(python.__dict__)   不可行 ,连特么的呈现内容都呈现不出来,看来跟常量的性质一样

class A:
    def __init__(self,name,ad,hp):
        self.name = name
        self.ad = ad
        self.hp = hp
c = A(‘zy‘,12,34)
print(c.__dict__)

还有一种命名元组你想到了么?

嘿嘿,那就是time时间模块里的 struct_time

它是通过 time.localtime 获取,它的也是一个struct_time类,但是它的属性更nametuple一样不可更改,也不可以添加

也没有自己的方法

>>> time.localtime()
time.struct_time(tm_year=2014, tm_mon=7, tm_mday=8, tm_hour=22, tm_min=9, tm_sec=1, tm_wday=1, tm_yday=189, tm_isdst=0)
>>> time.localtime()[1]
7
>>> time.localtime().tm_mon
7

pickle的意义

    import pickle
    class A(object):
        def __init__(self,name,hp,ad)
            self.name = name
            self.hp = hp
            self.ad = ad
    person = A(‘zy‘,100,10)
    with open(‘t1‘,‘wb‘) as f1:
        pickle.dump(person,f1)
    with open(‘t1‘,‘rb‘)as f2:
        c = pickle.load(f2)
    print(c.__dict__)

总结:
多态的实现在其他语言中用继承来实现,比如Java用接口实现多继承
在python当中是通过鸭子类型来实现,弱类型语言的意思就是不同类型的变量不允许相加
python还是一种动态语言,一个鸭子类型举例 动态python变量,在赋值的时候,赋值号(=)右边的数据类(list,set,int,float等)对象是什么类型 它就是什么类型

原文地址:https://www.cnblogs.com/CNHK1949/p/10617038.html

时间: 2024-09-28 21:30:21

python 多态这一部分的知识点相关应用的相关文章

入门学习Python必须要知道的知识点

Python被誉为全世界高效的编程语言,同时也被称作是"胶水语言",那它为何能如此受欢迎,下面我们就来说说Python入门学习的必备知识点,也就是它为何能够如此受欢迎的原因. 1.Python适用于哪些应用场景? 这个没有固定答案,很多人都说Python不适合开发GUI的程序,但Python自己的IDE--IDEL和第三方的IDE--Eric就是Python写的. 目前看到的更多的人是拿来写Web,使用如Django.web.py框架,没记错Flask也是. 也有一个情况用的比较多,用

面向对象【day07】:多态-面向对象使用场景--知识点回顾

本节内容 多态 面向对象使用场景 知识点回顾 一.多态 一.概述 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作.简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针. 那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化:继承可以扩展已存在的代码模块(类):它们的目的都是为了--代码重用.而多态则是为了实现另一个目的--接口重用!多态的作用,就是为了

Python之路番外:PYTHON基本数据类型和小知识点

Python之路番外:PYTHON基本数据类型和小知识点 一.基础小知识点 1.如果一行代码过长,可以用续行符 \换行书写 例子 if (signal == "red") and (car == "moving"): car = "stop" else : pass 等同于 if (signal == "red") and (car == "moving"): car = "stop"

鱼C《零基础入门学习Python》10-17节课时知识点总结

第10讲:列表:一个打了激素的数组 1. 列表都可以存放一些什么东西?  我们说 Python 的列表是一个打了激素的数组,如果把数组比喻成集装箱,那么 Python 的列表就是一个大仓库,Ta 可以存放我们已经学习过的任何数据类型. 2. 向列表增加元素有哪些方法?  三种方法想列表增加元素,分别是:append().extend() 和 insert().    3. append() 方法和 extend() 方法都是向列表的末尾增加元素,请问他们有什么区别?  append() 方法是将

Python Special Syntax 4:序列相关

元组通过圆括号中用逗号分割的项目定义.元组通常用在使语句或用户定义的函数能够安全地采用一组值的时候,即被使用的元组的值不会改变. 含有0个或1个项目的元组.一个空的元组由一对空的圆括号组成,如myempty = ().然而,含有单个元素的元组就不那么简单了.你必须在第一个(唯一一个)项目后跟一个逗号,这样Python才能区分元组和表达式中一个带圆括号的对象.即如果你想要的是一个包含项目2的元组的时候,你应该指明singleton = (2 , ). 序列的切片功能: name = 'swaroo

Python Special Syntax 5:对象相关

__init__方法一样,还有一个特殊的方法__del__,它在对象消逝的时候被调用.但是很难保证这个方法究竟在 什么时候 运行.如果你想要指明它的运行,你就得使用del语句, #-*-coding:utf-8 class Person: __privateName=None;#私有变量 count=0;#既可以被实例对象引用,也可以被当做静态对象引用,NND,好混乱. def __init__(self,name): self.count+=1 Person.count+=2 print('%

Python自动化开发第一周知识点

知识点一:变量 1.变量名可以包括字母.数字.下划线,但是数字不能做为开头.例如:name1是合法变量名,而1name就不可以. 2.系统关键字不能做变量名使用 3.Python推荐使用XX_XX_XX形式起名 4.Python没有常量概念(如C++使用const定义一个常量) 5.Python表示常量用大写单词表示(但是实际上可以被修改) ------------------------------------------------------------------------------

Python 多态

类的多态 多态 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作.简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针. 那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化:继承可以扩展已存在的代码模块(类):它们的目的都是为了--代码重用.而多态则是为了实现另一个目的--接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用"家谱"中

关于python的一些小的知识点-2

距离上一次写文章已经好多天了,今天,我还是继续说说我学习python的一些小的知识点 python列表采用的是自动的内存管理模式 注意list.clear()和del(list)区别 range()在python中返回的是一个列表  在python中返回的是一个可迭代对象 列表中包含的元素值的引用 删去列表中重复数的方法为set() 切片可以原地修改列表中的值 切片返回的是里热表的浅复制 enumerate函数对字符串和字典同样有效 列表推导式可以解决很多的小问题 像过滤元素,求100以内的素数