首页 > 编程语言 >0基础学Python——面向对象-可迭代、面向对象-迭代器、call方法、call方法实现装饰器、计算函数运行时间

0基础学Python——面向对象-可迭代、面向对象-迭代器、call方法、call方法实现装饰器、计算函数运行时间

时间:2024-11-06 19:17:04浏览次数:3  
标签:__ 迭代 stu self 面向对象 call print def

0基础学Python——面向对象-可迭代、面向对象-迭代器、call方法、call方法实现装饰器、计算函数运行时间

面向对象–可迭代

把对象看做容器,存储数据
如果希望对象可用 for–in遍历,把它转换为可迭代对象

实现方法

重写 __iter__方法,返回一个迭代器

class Student:
    def __init__(self, hobbys):
        self.hobbys = hobbys

    def __iter__(self, *args, **kwargs):
        return iter(self.hobbys)


stu = Student(['吃饭', '睡觉', '打豆豆'])
for i in stu:
    print(i)
for i in stu:
    print(i)

面向对象–迭代器

把对象看做容器,存储数据
如果希望对象迭代器

实现方法

重写 __iter__方法,返回当前对象
重写 __next__方法,返回并删除

class Student:
    def __init__(self, hobbys):
        self.hobbys = hobbys

    def __iter__(self):
        return self

    def __next__(self):
        if len(self.hobbys) > 0:
            return self.hobbys.pop(0)
        raise StopIteration


stu = Student(['吃饭', '睡觉', '打豆豆'])
print(next(stu))
print(next(stu))
print(next(stu))
# print(next(stu))
print('*' * 99)
for i in stu:
    print(i)

call方法

作用

__call__: 可以使对象可调用

class Student:
    def __init__(self):
        print('__init__')

    def __call__(self, *args, **kwargs):
        print('__call__')


stu = Student() # __init__
stu() # __call__

call方法实现装饰器

代码演示

class Fn:
    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        print('1')
        ret = self.func(*args, **kwargs)
        print('2')
        return ret


@Fn
def fn1(n):
    print('hello', n)


fn1('world')

计算函数运行时间

代码演示

import time


def timer(func):
    t1 = time.time()

    def inner():
        func()
        t2 = time.time()
        return f'{t2 - t1}秒'

    return inner


class Time:
    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        t1 = time.time()
        ret = self.func()
        t2 = time.time()
        print(f'{t2 - t1}秒')
        return ret


# @Time
@timer
def fn():
    for i in range(10000):
        print(i)


print(fn())

标签:__,迭代,stu,self,面向对象,call,print,def
From: https://blog.csdn.net/2201_75539182/article/details/143494598

相关文章

  • HAL_UART_RxCpltCallback与HAL_UARTEx_RxEventCallback使用场景
    1.HAL_UART_RxCpltCallback()是在接收到启动时设置的字节数(启动接收时需要设置接收数据长度)后的回调。适用于标准的接收模式,比如使用HAL_UART_Receive_IT或HAL_UART_Receive_DMA启动的接收。在处理完接收数据后,还需要重新启动接收(要在回调函数中调用HAL_UART_Receive_IT或HAL_......
  • 容器迭代器
    容器迭代器iterator:普通正向迭代器可以读取可以修改intmain(){vector<int>vec;for(inti=0;i<20;i++){vec.push_back(rand()%100+1);}autoit=vec.begin();for(;it!=vec.end();it++){if(......
  • Java 面向对象
    初识面向对象面向对象编程本质是:以类的方式组织代码,以对象的组织(封装)数据抽象:抽取相像的地方三大特性:封装:把数据装到盒子中不让别人查看,留一个接口自己使用继承:孩子继承父母的资产多态:说同一句话每个人都表达出不同的意思。从认识论角度考虑是先有对象后有类。对象:具......
  • 面向对象概述2
    6.标准JavaBean6.1标准的JavaBean类1类名需要见名知意2成员变量使用private修饰3提供至少两个构造方法无参构造方法带全部参数的构造方法4成员方法提供每一个成员变量对应的SetXxx()/getXxx()方法.如果还有其他行为,也需要写上7.对象内存图7.1一个对象的内......
  • JavaScript的迭代器和生成器
    1.迭代器Iterator1. 基本概念JavaScript表示集合的对象大致有Object,Array,Map,Set四种,并且这四种类型的数据之间可以相互以成员嵌套(如Array的成员可以是Object,而Map又可以嵌入Object的成员中),为了处理所有不同的数据结构,就需要统一的接口机制。迭代器(Iterator)就是这样一种......
  • [Python学习日记-60] 什么是面向对象的程序设计
    [Python学习日记-60]什么是面向对象的程序设计简介编程范式面向过程编程面向对象编程简介    前面我们学习了Python中的语法、数据类型、函数之类的一系列相关知识,我们对Python的编程也比较了解了,甚至可以写一些脚本出来进行一些文件的过滤或者日志的生成......
  • 面向对象三大特征之一:封 装
    1、特点封装是面向对象的核心思想,两层含义:一是一个整体(把对象的属性和行为看成一个整体,即封装在一个对象种),二是信息隐藏,对外隐藏,但可以通过某种方式进行调用。2、访问权限(1)private:当前类访问级别,属于私有访问权限。(2)default:本包访问权限,一个类中的属性或方法没有任何访问权......
  • 面向对象试题带答案
    一、选择题 (1)下列函数中(1)是不能重载的。A)成员函数B)非成员函数C)析构函数D)构造函数(2)下列重载函数的描述中,(2)是错误的。A)重载函数中不允许使用默认参数B)重载函数中编译系统根据参数表进行选择C)不要使用重载函数来描述毫不相干的函数D)构造函数重载将......
  • C++面向对象三大特性之多态
    1.1多态的基本概念 继承性反映的是类与类之间的层次关系,多态性则是考虑这种层次关系以及类自身特定成员函数之间的关系来解决行为的再抽象问题。其实就是同一符号或者名字在不同情况下具有不同解释的现象,即是指同一个函数的多种形态。多态分为两类1.静态多态:函数重载和运......
  • python openai 通过Function Call 创建自动化任务
    目录一、什么是FunctionCall(函数掉用)1. 功能概述2. 工作原理二、如何实现函数调用1、定义自己的get_weather函数2、给助手添加函数调用3、写好instrction,指导assistant去掉用你定义的方法。4、最后也是最重要的,捕获Assistant的FunctionCall三、常见问题四、......