Python从0到POC编写-魔法方法

name

__name__ 是系统定义的内部函数,

它的作用是识别模块。

通常我们看到这样一句话:

if __name__ == '__main__'

__name__ 的值有两种情况,那么挨个来说下。


如果模块是被直接执行的 ,那么 __name__ 的值 为 __main__

例如:


def test():print '__name__ = '__name__
if __name__ == '__main__':test()

定义一个 test() 函数,

那么这个函数是被执行的,

则 __name__ 就会变为 __main__

images


如果模块是被导入的,那么 __name__ 的值 为 模块的名字,

例如:


import sys
def test():print '__name__ = '__name__
if __name__ == '__main__':test()

使用 import函数 导入sys模块,

__name__ 的值 就是 sys


main

__main__ 是顶层代码执行的作用域的名称。

模块的 __name__ 在通过标准输入、脚本文件或是交互式命令读入的时候会等于 __main__ ,

模块可以通过检查自己的 __name__ 来得知是否运行在 main 作用域中。

__main__ 一般跟 __name__ 连用,不会单独使用。


init

__init__ 方法是一个特殊的方法(init是单词初始化initialization的省略形式),

它的作用是在使用类创建对象之后被执行,用于给新创建的对象初始化属性用。

举个粟子:


class test:def __init__(self, n, a):self.name = name    #  初始化属性self.age = age      #  初始化属性print("test")

self 表示对象本身,谁调用,就表示谁,

n 和 a 是自定义的变量名称,随便取啥都行。

这里 self.name = n 和 self.age = a 表示将外部传来的 n 和 a ,赋值给self对象的 name 和 age 属性。

举个粟子:


>>> man = test("小明",18)  #  实例化对象
>>> test  #  输出 test ,说明在创建类的实例的时候,__init__ 方法就立马被调用了。
>>> self.name
>>> '小明'
>>> self.age
>>> '18'

这里面,小明就是 n ,18 就是 a

在实例化对象的时候将他们分别赋值给 n 和 a


module

__module__ 表示当前操作的对象在那个模块

此方法也有两个不同的结果。


如果当前模块为被调用模块的时候 打印当前模块的名称

例如:


class Person(object):def __init__(self):self.name = '张三'from test import Person   #  从另一个文件中导入类Personobj = Person()
print(obj.__module__)    #  输出 test 即 输出模块

如果当前模块为顶层模块执行 则打印 __main__

例如:


def test():passprint(test.__module__)   #  打印 __main__

str

如果要把一个类的实例变成 str ,就需要实现特殊方法 __str__

python在调用 print() 打印实例化对象时,

会调用 __str__() 方法 ,如果 __str__() 方法中有返回值,就会打印其返回值。

__str__ 方法 使用 return 作为返回值,而不是 print

例如:


class test:def __init__(self,name,age):self.name = nameself.age = age def __str__(self):return "我是 __str__ 方法"   #  实例化对象的时候有 return 会打印返回值
if __name__=="__main__":demo = test("张三",18)   #  实例化对象print(demo)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/691952.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

247 基于matlab的梁的振型仿真

基于matlab的梁的振型仿真。利用有限元理论,求二维梁的固有频率和振型。短边固定,给定长度、横截面积,弹性模量及材料密度已知。并对比理论计算结果进行分析。各参数自己设定。程序已调通,可直接运行。 247 梁的振型仿真 固有频率…

【初级数据结构】队列

目录 前言队列的概念及结构队列的实现队列的结构队列的初始化队列的销毁入队出队取队头元素取队尾元素判断队列是否为空取出队列中元素个数代码测试 完整代码Queue.hQueue.ctest.c 前言 前面我们已经学习了栈,栈是一种后进先出的结构,即LIFO,…

GPT 大型语言模型可视化教程

网址: LLM Visualization 简介 欢迎来到 GPT 大型语言模型演练!在这里,我们将探索只有 85,000 个参数的 nano-gpt 模型。 它的目标很简单:取一个由六个字母组成的序列: C B A B B C 并按字母顺序排列,即…

【Qt-CMake】QT中cmak编译出现CMake Error: The source.. does not match the soused

QT中cmak编译出现CMake Error: The source… does not match the soused 分析 前提是该项目是从另一个路径的项目复制过来的,编写代码时发现无论怎样修改代码,运行后都没有任何变化,以为是qtbug,重构重启都没用,最后…

报表控件Stimulsoft指南:在 JavaScript 报告工具中使用节点计划

我们最近发布了一篇关于使用Quartz.NET 库自动执行报告任务的文章。继续这个主题,今天我们将深入探讨我们的报告如何与 Node Schedule 作业调度程序集成。 Stimulsoft Ultimate (原Stimulsoft Reports.Ultimate)是用于创建报表和仪表板的通用…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-15.5讲 GPIO中断实验-通用中断驱动编写

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

怎么清理服务器的C盘?

有时候我们经常会遇到C盘被占满的情况,C盘被占满的原因有很多,下面我们就来分析下有可能导致C盘占满的原因: 第一种情况:中毒 打开服务器任务管理器选择进程,并且勾选显示所有用户的进程,我们可以点击映像…

wsl2安装rancher并导入和创建k8s集群

环境准备 安装wsl2点击此文]ubuntu20.04安装docker 点击此文,安装完成后docker镜像仓库改成阿里云镜像加速地址.如果不熟请点击此文 docker 安装rancher 启动wsl,根据官方文档以root身份执行 sudo docker run -d --restartunless-stopped -p 80:80 -p 443:443 --privileged …

Isaac Sim 3(学习笔记5.8)

Isaac Sim 利用深度学习获取mask掩码图 参考内容 Kubernetes官网 在 Linux 系统中安装并设置 kubectl | Kubernetes准备开始 kubectl 版本和集群版本之间的差异必须在一个小版本号内。 例如:v1.30 版本的客户端能与 v1.29、 v1.30 和 v1.31 版本的控制面通信。 用…

day6Qt作业

人脸识别系统 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <opencv2/opencv.hpp> #include <iostream> #include <math.h> #include<opencv2/face.hpp> #include <vector> #include <map> #include <QMessag…

03继承与多态续

1、虚基类与虚继承 class A { public:virtual void func(){cout << "call A ::func()" << endl;}void operator delete(void* ptr){cout << "operator delete ptr " << ptr << endl;free(ptr);} private:int ma;};class B :…

初识sql注入--手工注入

目录 可能使用的sql函数 入侵网站方式 1、文件上传漏洞 2、rce 3、sql注入 SQL注入 什么是sql注入 进行SQL注入 实验环境 开始实验&#xff08;使用information_shema数据库&#xff09; 1、进入靶场 2、报列数 下面来解释一下为什么要照上面SQL语句写 url编码 单…