~~面向对象进阶——__name__=="__main__"~~
进击のpython
*****
面向对象进阶——__name__=="__main__"
前面我们在讲模块的时候,其实还有一个知识点没有很好的讲
那就是main和name
可能你们在看一些代码的时候或多或少的都会见到下面的这串代码
if __name__ == '__main__':
func()
但是百思不得其解,这行代码到底是什么意思呢?
问题的解决都是一点一点来的
我们先打印这个__name__
看看是啥!
__main__
可以看到打印出来的就是__main__
熬,那就是说这个代码是恒成立的
那我要这个代码有什么用呢?
还记得我们在说模块的时候说过
一个py文件就可以看作是一个模块是吧
那我这个文件是不是可以叫做模块啊
是不是可以被新的文件调用啊
那我们简单的丰富一下这个文件里面的代码
print("这是在if上面的语句")
print(__main__)
if __name__ == '__main__':
print("这是在if下面的语句")
我们现在先在这个文件下运行,查看一下结果
这是在if上面的语句
__main__
这是在if下面的语句
然后我们把这个文件(fesa.py)当作模块
在别的文件下进行调用
结果如下:
这是在if上面的语句
fesa
我们可以看到,这个结果是不一样的
__name__的打印结果变成了模块的名字
而且,在if下面的语句也没有被执行
其实也很能理解,因为__name__变了
就不再等于__main__了
没有满足条件,当然就不会执行if下面的语句啦
其实,我们在面向对象的时候知道
self其实是实例本身对吧
那么__main__就可以理解成模块本身
(只能这么理解,但是实际不是这样的)
我们学过sys模块
我们可以用sys模块来简单的展示一下
import sys
for k, v in sys.modules.items():
print(k, v)
打印出来的结果有,但是你能在这么多的打印数据当中找到
__main__ <module '__main__' from 'D:/xiangmu/asdfg.py'>
看到了吗?
这个__main__的值,其实就是这个模块本身
所以总结一下:
- 在自己的py文件里执行的时候,这句代码其实没有什么用,正常的执行
- 在被当成模块调用的时候,只执行这句话上面的代码
但是这玩仍有什么用呢?
其实除了上面的作用以外
还有别的操作!
我要是想导入一个模块
是不是这么写
import time
我要是把time写成字符串是不是不行
那我要是想根据用户的输入来导入模块怎么写呢?
那要是用户输入,是不是输入的就是一个字符串?
直接写肯定是不行的
在解释器里给我们提供了这种方法
__import__("time")
但是像这种魔法方法啊
一般是不推荐使用的
所以除了这种方法,我们还有另一个方法
python官方给我们推荐了另一种方法
import importlib
importlib.import_module()
这个方法里面会添加两个参数
一个是函数名,另一个没什么用,暂时不用记
里面写的是个字符串类型的
当然这个是调用本路径的
要是调用别的路径的就是
文件名.方法
*有点东西*
*继续深究*
~~面向对象进阶——__name__=="__main__"~~的更多相关文章
- python进阶(7):面向对象进阶
学了面向对象三大特性继承,多态,封装.今天我们看看面向对象的一些进阶内容,反射和一些类的内置函数. 一.isinstance和issubclass class Foo: pass class Son( ...
- python基础——面向对象进阶
python基础--面向对象进阶 1.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 ...
- Python面向对象进阶和socket网络编程-day08
写在前面 上课第八天,打卡: 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __i ...
- python_面向对象进阶(7)
第1章 面向对象特性—继承(补充) 1.1 接口类.抽象类介绍 1.2 接口类 1.3 接口类应用过程 1.3.1 第一版:完成多种支付方式接口 1.3.2 第二版: 归一化设计,统一支付方式 1.3 ...
- Python面向对象进阶和socket网络编程
写在前面 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __init__(self ...
- python进阶_浅谈面向对象进阶
python进阶_浅谈面向对象进阶 学了面向对象三大特性继承,多态,封装.今天我们看看面向对象的一些进阶内容,反射和一些类的内置函数. 一.isinstance和issubclass class F ...
- Python学习之面向对象进阶
面向对象进阶当然是要谈谈面向对象的三大特性:封装.继承.多态 @property装饰器 python虽然不建议把属性和方法都设为私有的,但是完全暴露给外界也不好,这样,我们给属性赋值的有效性九无法保证 ...
- day26、面向对象进阶:多态、封装、反射
一.多态 什么是多态: 类的继承有两层意义:1.改变 2.扩展 多态就是类的这两层意义的一个具体的实现机. 即:调用不同类实例化的对象,下的相同的方法,实现的过程不一样 python中的标准类型就是多 ...
- Python开发【第七篇】:面向对象 和 python面向对象进阶篇(下)
Python开发[第七篇]:面向对象 详见:<Python之路[第五篇]:面向对象及相关> python 面向对象(进阶篇) 上一篇<Python 面向对象(初级篇)> ...
随机推荐
- java.lang.Integer cannot be cast to java.lang.String
错误原因是类型转换! 说Integer 类型不能转成String类型. 解决办法: 将错误中的(String)强制转换类型修改为 object.toString() toString方法是Ja ...
- Spark之权威指南经典案例
hadoop权威指南上有一个求历史最高温度的经典案例,源数据如下: -- sample.txt0067011990999991950051507004+68750+023550FM-12+038299 ...
- Zookeeper详解-应用程序(七)
Zookeeper为分布式环境提供灵活的协调基础架构.ZooKeeper框架支持许多当今最好的工业应用程序.我们将在本章中讨论ZooKeeper的一些最显着的应用. 雅虎 ZooKeeper框架最初是 ...
- iOS App开发的那些事儿1:如何建立合适的规范
<iOS App开发的那些事儿>系列文章从更宏观的角度出发,不仅仅局限于具体某个功能.界面的实现,而是结合网易云信iOS端研发负责人多年的经验,从如何优化现有代码的角度出发,深度分析如何创 ...
- JavaWeb入门_模仿天猫整站Tmall_JavaEE实践项目
Tmall_JavaEE 技术栈 Servlet + Jsp + Tomcat , 是Java Web入门非常好的练手项目 效果展示: 模仿天猫前台 模仿天猫后台 项目简介 关联项目 github - ...
- ssm中mapper注入失败的传奇经历
最近因为要测试一个功能,需要用最短的时间来启动服务,开启测试程序,但平常所用的框架中已经集成了各种三方的东西,想着那就再重新搭建一个最简单的ssm框架吧. 搭建可参考:简单ssm最新搭建 搭建过程并不 ...
- appcan中evaluateScript、evaluatePopoverScript的使用
1. 如果要在某个主窗体中执行JS,使用 appcan.window.evaluateScript(name,scriptContent) eg: appcan.window.evaluateScri ...
- CentOS 7编译安装Redis
安装编译相关依赖 CentOS/Fedora yum install gcc gcc-c++ cmake tcl 下载Redis源码包 curl -o redis-4.0.10.tar.gz http ...
- .NET分布式框架 | Orleans 知多少
引言 公司物联网项目集成Orleans以支持高并发的分布式业务,对于Orleans也是第一次接触,本文就分享下个人对Orleans的理解. 这里先抛出自己的观点:Orleans 是一个支持有状态云生应 ...
- flask请求上下文 (转)
本篇阅读目录 一.flask中的CBV 二.werkzeug + 上下文初步解读 三.偏函数和线程安全 回到顶部 一.flask中的CBV 对比django中的CBV,我们来看一下flask中的CBV ...