IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python-第十三讲 -> 正文阅读

[Python知识库]Python-第十三讲

13.1 多态

# 没有继承关系
class Duck(object):
    def fly(self):
        print('鸭子在草地飞行')
        

class Swan(object):
    def fly(self):
        print('天鹅在空中翱翔')


class Plane(object):
    def fly(self):
        print('飞机在云层滑翔')
        
        
def method(obj):
    obj.fly()
    
    
duck = Duck()
method(duck)

swan = Swan()
method(swan)

plane = Plane()
method(plane)

# 有继承关系
class Grandpa(object):
    def money(self):
        print('这是爷爷的钱')
        
        
class Father(Grandpa):
    def money(self):
        super().money()
        print('这是父亲的钱')

class Son(Father):
    def money(self):
        super().money()
        print('这是儿子的钱')
        

def fun(obj):
    obj.money()
    
grandpa = Grandpa()
father  = Father()
son = Son()

fun(grandpa)
fun(father)
fun(son)

输出

C:\Users\qingf\PycharmProjects\pythonProject\venv\Scripts\python.exe C:/Users/qingf/PycharmProjects/pythonProject/venv/第十四讲.py
鸭子在草地飞行
天鹅在空中翱翔
飞机在云层滑翔

Process finished with exit code 0

C:\Users\qingf\PycharmProjects\pythonProject\venv\Scripts\python.exe C:/Users/qingf/PycharmProjects/pythonProject/venv/第十四讲.py
这是爷爷的钱
这是爷爷的钱
这是父亲的钱
这是爷爷的钱
这是父亲的钱
这是儿子的钱

Process finished with exit code 0
  • 鸭子类型:一只鸟,能走路,能叫,能游泳, 但是不关注鸟本身,只关注走路,叫,游泳的这些方法

13.2 属性和方法总结

class A(object):
    # 类属性,直接定义在类中的属性
    # 类属性可以通过类对象和该类的实例对象来访问
    # 类属性只能通过类对象来修改,不能通过实例对象来修改
    num = 0
    
a = A()
a.num = 10
print(A.num)
print(a.num)

-属性修改(类属性只能通过类对象来修改,不能通过实例对象来修改

对象.属性名 = 属性值

  • 实例方法
  • 实例方法实例是可以直接调用的
  • 类也可以调用实例方法,但是要传递一个实例对象作为参数
class B(object):
    
    def demo(self):
        print('这是demo方法')
        
b = B()
b.demo()
B.demo()
B.demo(b)

输出

C:\Users\qingf\PycharmProjects\pythonProject\venv\Scripts\python.exe C:/Users/qingf/PycharmProjects/pythonProject/venv/第十四讲.py
Traceback (most recent call last):
  File "C:\Users\qingf\PycharmProjects\pythonProject\venv\第十四讲.py", line 66, in <module>
    B.demo()
TypeError: demo() missing 1 required positional argument: 'self'
这是demo方法
这是demo方法

Process finished with exit code 1
  • 类方法

  • 类方法需要使用装饰器@classmethod来装饰

  • 类方法可以由实例对象和类对象来调用,不需要传递任何参数

class B(object):
    
    @classmethod
    def demo1(cls): #cls是默认参数,相当于当前的类对象
        print('我才是真正的类方法')
        
        
b = B()
b.demo1()
B.demo1()

输出

C:\Users\qingf\PycharmProjects\pythonProject\venv\Scripts\python.exe C:/Users/qingf/PycharmProjects/pythonProject/venv/第十四讲.py
我才是真正的类方法
我才是真正的类方法

Process finished with exit code 0
  • 静态方法

  • 静态方法需要使用装饰器@staticmethod来装饰

class B(object):
    
    @staticmethod
    def demo2():
        print('我是静态方法')
        
        
b = B()
b.demo2()
B.demo2()

11.3 单例模式

  • _new_()方法

  • _new_()方法用于创建与返回一个对象,在类准备将自身实例化时调用

class Demo(object):
    def __init__(self):
        print('__init__')
        
    def __new__(cls):# 这里相当于重写了父类__new__方法,不在用于创建与返回一个对象
        print('__new__')
        return super().__new__(cls)
    
d = Demo()

输出

C:\Users\qingf\PycharmProjects\pythonProject\venv\Scripts\python.exe C:/Users/qingf/PycharmProjects/pythonProject/venv/第十四讲.py
__new__
__init__

Process finished with exit code 0
class Demo(object):
    
    a = 1
    
    def domo(self):
        pass
    
    
d1 = Demo()
d1.demo()
d2 = Demo()
d2.demo()
  • 单例模式是一种常用的软件设计模式,也就是说该类只包含一个实例
  • 1.判断对象是否存在:不存在---->创建实例
  • 2.如果存在,返回已经创建的实例
class Single(object):
    obj = None
    def __new__(cls):
        if cls.obj is None:
            cls.obj = super().__new__(cls)
        	return cls.obj
        else:
            return cls.obj
    
s1 = Single()
s2 = Single()
print(id(s1))
print(id(s2))

11.4 模块

  • 模块化指将一个完整的程序分解成一个个小模块

  • 通过将模块组合,来搭建出一个完成的程序

  • 优点:

    • 方便开发
    • 方便维护
    • 模块可以重复使用
  • 模块创建

  • 同一模块不管导入多少次,只会执行一次

import test_mokuai

print(test_mokuai) #打印模块名称及路径
print(__name__) 
if __name__ == '__main__': # 如果模块函数为主函数才执行后面的test1()
    test1()
  • 需要自己掌握的一些模块:os, sys, time, random

11.5 复习

  1. 多态

    • 不关心对象类别,只关心对象的实例方法是否一致,一样的话,则可以使用一个接口调用不同的类的实例方法,展现出不同的形态
  2. 单例模式的创建(__new__方法)

    class Single(object):
        count = None # 创建一个类属性,也可以称之为常量
        
        def __new__(cls, *args, **kwargs): # 重写父类的__new__方法
            if cls.count is None: #判断实例是否没有被创建
                cls.count = super().__new__(cls)
                return cls.count
            else:
                return cls.count
                
    
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-08 11:45:45  更:2021-10-08 11:47:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:56:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码