关于类函数设计的一点总结

by:授客 QQ:1033553122

代码1

#!/usr/bin/env python

#-*-encoding:utf-8-*-

__author__ = 'shouke'

import os

class MyTestClass:

def __init__(self):

self.file_list_for_dirpath = []

# 获取指定目录下的文件

def get_files_in_dirpath(self, dirpath):

if not os.path.exists(dirpath):

print('路径:%s不存在,退出程序' % dirpath)

exit()

for name in os.listdir(dirpath):

full_path = os.path.join(dirpath, name)

if os.path.isdir(full_path):

self.get_files_in_dirpath(full_path)

else:

self.file_list_for_dirpath.append(full_path)

def get_file_list_for_dirpath(self):

return self.file_list_for_dirpath

obj  = MyTestClass()

obj.get_files_in_dirpath('E:\mygit\AutoTestPlatform/UIAutotest')

print(obj.get_file_list_for_dirpath())

运行结果:

说明:

如上,get_files_in_dirpath函数目的是为了获取指定目录下的文件,按常理是函数中定义个变量,存放结果,最后直接return这个变量就可以了,但是因为涉及子目录的遍历,函数中通过self.get_files_in_dirpath对函数进行再次调用,这样一来,便无法通过简单的return方式返回结果了。

个人觉得比较不合理的方式就是按上面的,“强行”在类中定义个类属性来存放这个结果,然后再定义个函数,返回这个结果,感觉这样设计不太好,还会增加代码逻辑的模糊度。

那咋办?个人觉得比较合理的解决方案,可以使用嵌套函数。如下:

代码2

#!/usr/bin/env python

#-*-encoding:utf-8-*-

__author__ = 'shouke'

import os

class MyTestClass:

def __init__(self):

pass

# 获取指定目录下的文件

def get_files_in_dirpath(self, dirpath):

file_list_for_dirpath = []

        def collect_files_in_dirpath(dirpath):

            nonlocal file_list_for_dirpath

            if not os.path.exists(dirpath):

                print('路径:%s不存在,退出程序' % dirpath)

                exit()

 

            for name in os.listdir(dirpath):

                full_path = os.path.join(dirpath, name)

                if os.path.isdir(full_path):

                    collect_files_in_dirpath(full_path)

                else:

                    file_list_for_dirpath.append(full_path)

collect_files_in_dirpath(dirpath)

return file_list_for_dirpath

obj  = MyTestClass()

print(obj.get_files_in_dirpath('E:\mygit\AutoTestPlatform/UIAutotest'))

运行结果:

Python 关于类函数设计的一点总结的更多相关文章

  1. Python 关于Python函数参数传递方式的一点探索

    关于Python函数参数传递方式的一点探索 by:授客 QQ:1033553122 实践代码 #!/usr/bin/env python # -*- coding:utf-8 -*- __author ...

  2. 《一头扎进》系列之Python+Selenium框架设计篇3- 价值好几K的框架,狼来了,狼来了....,狼没来,框架真的来了

    1. 简介 前边宏哥一边一边的喊框架,就如同一边一边的喊狼来了!狼来了!.....这回是狼没有来,框架真的来了.从本文开始宏哥将会一步一步介绍,如何从无到有地创建自己的第一个自动化测试框架.这一篇,我 ...

  3. 《一头扎进》系列之Python+Selenium框架设计篇4- 价值好几K的框架,呵!这个框架有点意思啊

    1.简介 前面文章,我们实现了框架的一部分功能,包括日志类和浏览器引擎类的封装,今天我们继续封装一个基类和介绍如何实现POM.关于基类,是这样定义的:把一些常见的页面操作的selenium封装到bas ...

  4. 《一头扎进》系列之Python+Selenium框架设计篇5 - 价值好几K的框架,哎呦!这个框架还真有点料啊!!!

    1. 简介 其实,到前面这一篇文章,简单的Python+Selenium自动化测试框架就已经算实现了.接下来的主要是介绍,unittest管理脚本,如何如何加载执行脚本,再就是采用第三方插件,实现输出 ...

  5. 学写PEP,参与Python语言的设计

    如果你为Python写了一篇PEP,这篇PEP成功的被Python指导委员会接受了,那么以后你在吹牛皮的时候你就可以说我主导了Python语言某个特性的设计工作. -- 跬蟒 我就问你主导Python ...

  6. Python 为什么不设计 do-while 循环结构?

    在某些编程语言中,例如 C/C++.C#.PHP.Java.JavaScript 等等,do-while 是一种基本的循环结构. 它的核心语义是:先执行一遍循环体代码,然后执行一遍条件语句,若条件语句 ...

  7. python多线程爬虫设计及实现示例

    爬虫的基本步骤分为:获取,解析,存储.假设这里获取和存储为io密集型(访问网络和数据存储),解析为cpu密集型.那么在设计多线程爬虫时主要有两种方案:第一种方案是一个线程完成三个步骤,然后运行多个线程 ...

  8. 浅析Python解释器的设计

    从现代编译器的角度看,解释器和编译器的边界已经相当的模糊.我们后面的讨论说到的编译器就是Python的解释器,没有特别说明的指的是CPython的实现. 内存管理(Memory Management) ...

  9. Python 的经典设计格言,格言来源于 Python 但不限于 Python

    The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Si ...

随机推荐

  1. Python You-Get (送你一个免广告的视频和音乐网站 VIP)

    You-get可以在仅仅提供URL情况下就可以实现下载视频.图片.音乐等信息.也可以通过播放器在线观看视频或听音乐,重要的是再也不用烦恼弹出的广告了,如果你想观看视频,但又不想观看广告,并且你还想把视 ...

  2. asp.net MVC 5 路由 Routing

    ASP.NET MVC ,一个适用于WEB应用程序的经典模型 model-view-controller 模式.相对于web forms一个单一的整块,asp.net mvc是由连接在一起的各种代码层 ...

  3. 利用 ELK 搭建 Docker 容器化应用日志中心

    利用 ELK 搭建 Docker 容器化应用日志中心 概述 应用一旦容器化以后,需要考虑的就是如何采集位于 Docker 容器中的应用程序的打印日志供运维分析.典型的比如SpringBoot应用的日志 ...

  4. mysql 开发基础系列21 事务控制和锁定语句(下)

    1.  隐含的执行unlock tables 如果在锁表期间,用start transaction命令来开始一个新事务,会造成一个隐含的unlock tables 被执行,如下所示: 会话1 会话2 ...

  5. [Jenkins]Jenkins构建时提示java.io.IOException: No space left on device

    突然发现Jenkins的Job全部都停了,打开Jenkins发现所有的slave机器,均提示: 点开Dead(!),提示Thread has died,如下图: 看图好像说是Jenkins所在的服务器 ...

  6. Java-jsoup-解析HTML

    /**  * jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操 ...

  7. Dependency injection in .NET Core的最佳实践

    我们知道依赖注入(DI)是一种实现对象及其协作者或依赖关系之间松散耦合的技术. ASP.NET Core包含一个简单的内建容器来支持构造器注入. 我们试图将DI的最佳实践带到.NET Core应用程序 ...

  8. 【EF6学习笔记】(七)读取关联数据

    本篇参考原文链接:Reading Related Data 本章主要讲述加载显示关联数据: 数据加载分为以下三种 Lazy loading 这种加载方式在于需要用到这个导航属性数据的时候,才会去数据库 ...

  9. 【原创】STM32下波特率计算详解

    波特率的计算 STM32下的波特率和串口外设时钟息息相关,USART 1的时钟来源于APB2,USART 2-5的时钟来源于APB1.在STM32中,有个波特率寄存器USART_BRR,如下:     ...

  10. 2014-2015 ACM-ICPC, Asia Xian Regional Contest(部分题解)

    摘要 本文主要给出了2014-2015 ACM-ICPC, Asia Xian Regional Contest的部分题解,说明了每题的题意.解题思路和代码实现,意即熟悉区域赛比赛题型. Built ...