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

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. log4j日志输出到日志文件中和控制台中 +log4j配置详解

    1.引入log4j的jar包 https://mvnrepository.com/,可以找到log4j的jar和依赖. 2.创建log4j.properties,并配置log4j #设置日志的级别 , ...

  2. 图片格式PGM缩写

    PGM是Portable Gray Map的缩写.它是灰度图像格式中一种最简单的格式标准.另外两种与之相近的图片格式是PBM和PPM.它们分别相应着黑白图像和彩色图像. PGM的数据存放方式相比于JP ...

  3. 工作随笔—integer对象比较

    问题:对于integer对象,当比较2==2的时候,返回的值是true还是false?当比较2000==2000的时候,返回的值是true还是false? 回答:当比较2==2的时候,返回的值是tru ...

  4. spark面试总结2

    Spark core面试篇02 1.cache后面能不能接其他算子,它是不是action操作? 答:cache可以接其他算子,但是接了算子之后,起不到缓存应有的效果,因为会重新触发cache. cac ...

  5. [原创]K8Cscan插件之Windows密码爆破

    [原创]K8 Cscan 大型内网渗透自定义扫描器 https://www.cnblogs.com/k8gege/p/10519321.html Cscan简介:何为自定义扫描器?其实也是插件化,但C ...

  6. 给iPhone手机安装*.ipa

    首先手机连接电脑,打开 ITunes. 左上角点击文件,再点击添加到资料库. 找到你要安装的ipa点击选择打开 好了ipa已经添加进去后,你会看你你刚才添加进去的应用在列表内,点击左上角一个手机的图标 ...

  7. 使用一年ESB感受

    ESB(Enterprise service bus)-----企业服务总线的简写. 目前使用的是openESB,Sun公司的开源社区提供的,集成在netbean中,使用glassFish服务器. 先 ...

  8. 并发服务器三种实现方式之进程、线程和select

    前言:刚开始学网络编程,都会先写一个客户端和服务端,不知道你们有没有试一下:再打开一下客户端,是连不上服务端的.还有一个问题不知道你们发现没:有时启服务器,会提示“Address already in ...

  9. Spring Cloud Gateway中异常处理

    最近我们的项目在考虑使用Gateway,考虑使用Spring Cloud Gateway,发现网关的异常处理和spring boot 单体应用异常处理还是有很大区别的.让我们来回顾一下异常. 关于异常 ...

  10. μC/OS-II 要点分析 ------ PendSV_Handler

    首先贴出今天要与大家分享的内容源码(位于内核源码的 os_cpu_a.asm 中): PendSV_Handler CPSID I MRS R0, PSP CBZ R0, PendSV_Handler ...