python的一些总结

python Class介绍

Python的class是面向对象编程中的重要概念,它让代码更加模块化、可重用性强。

Python class的基本用法和理解。

Class的定义

在Python中,用关键字class来定义一个类,语法如下:

class MyClass:
    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2
        
    def my_method(self):
        print("Hello world")
  • __init__()方法是类的构造函数,在创建实例时进行初始化。
  • 在类中定义的函数称为“方法”,第一个参数必须是self,代表该方法所属的对象实例。
Class的实例化

在定义完class之后,可以通过调用类来创建实例:

my_instance = MyClass(1, 2)

这将调用MyClass的构造函数,并返回一个新的MyClass对象实例,其中arg1设置为1,arg2设置为2。

Class的属性和方法

在class中,可以定义变量作为类的属性,与普通的变量相似。

class MyClass:
    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2
        
    def my_method(self):
        print("Hello world")
        
    my_var = "hello"

此外,还可以定义静态方法和类方法:

class MyClass:
    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2
        
    def my_method(self):
        print("Hello world")
        
    @staticmethod
    def static_method():
        print("This is a static method.")
    
    @classmethod
    def class_method(cls):
        print("This is a class method.")
  • @staticmethod装饰器定义了一个静态方法,不需要实例化对象即可调用。
  • @classmethod装饰器将第一个参数(通常命名为cls)绑定到类本身,而非对象实例。
Class的继承

Python中的class支持继承,允许派生出新的子类,以便于代码组织和重复利用。如下所示:

class MySubClass(MyClass):
    def __init__(self, arg1, arg2, arg3):
        super().__init__(arg1, arg2)
        self.arg3 = arg3
    
    def my_sub_method(self):
        print("This is a sub method.")

在这个例子中,MySubClass继承自MyClass,并添加了一个新的变量arg3和一个新的方法my_sub_method()

可以通过以下方式创建子类的对象实例:

my_sub_instance = MySubClass(1, 2, 3)

此时,my_sub_instance既拥有了父类MyClass的属性和方法,也拥有了子类MySubClass的属性和方法。

Python中的class提供了面向对象编程的支持,可以将代码更加模块化、可重用性强。在定义class时,我们可以设置构造函数、属性和方法等,也可以继承父类并添加新的特性。

python 文件之间的互相调用

在Python中,可以通过模块的方式实现文件之间的互相调用。一个模块就是一个包含Python代码的文件,其中定义了函数、类、变量等。

以下是几种常见的Python文件之间调用方式:

1. 直接导入

如果要在一个Python文件中使用另一个Python文件中的函数或变量,可以直接通过import语句导入该模块:

File1.py
def func():
    return "Hello world"

# File2.py
import File1

print(File1.func())  # 输出:Hello world

注意:在导入模块时,需要保证被导入的模块与当前模块在同一目录或在Python解释器的搜索路径中。

2. from…import…

如果只需要使用模块中的部分函数或变量,可以使用from...import...语句:

File1.py
def func():
    return "Hello world"

var = "a variable"

# File2.py
from File1 import func, var

print(func())  # 输出:Hello world
print(var)     # 输出:a variable

3. 给模块取别名

在导入模块时,还可以给模块取别名:

File1.py
def func():
    return "Hello world"

# File2.py
import File1 as F1

print(F1.func())  # 输出:Hello world

4. 导入所有的函数和变量

如果想导入模块中的所有函数和变量,可以使用通配符*

 File1.py
def func1():
    return "Hello"

def func2():
    return "world"

# File2.py
from File1 import *

print(func1())  # 输出:Hello
print(func2())  # 输出:world

注意:不建议在实际开发中使用此种方式导入模块中的函数和变量,因为可能会导致命名冲突或者代码难以维护。

5. 同一目录下多层级调用

在同一目录下,如果存在多个文件需要相互调用,也可以采用以上方法。但如果多个文件层级比较深,需要使用..表示上一级目录或更多级别,则需要使用包(Package)来管理这些文件。

包(Package)
  • 包是一个有层次结构的目录结构,它定义了模块的子目录和模块之间的关系。
  • 包中必须包含一个__init__.py文件,该文件可以为空文件或包含初始化代码。
  • 包中还可以包含其他模块或子包。

以下是一个简单的包和模块示例:

复制代码my_package/
├── __init__.py
├── module1.py
└── subpackage/
    ├── __init__.py
    └── module2.py

其中:

  • my_package/是一个包;
  • my_package/__init__.py是包的初始化文件;
  • my_package/module1.py是包中的一个模块;
  • my_package/subpackage/my_package包中的一个子包;
  • my_package/subpackage/__init__.py是子包的初始化文件;
  • my_package/subpackage/module2.py是子包中的一个模块。

在Python中,可以通过以下方式导入包和模块:

 导入包
import my_package

# 导入模块
from my_package import module1

# 导入子包中的模块
from my_package.subpackage import module2

以上是Python文件之间互相调用的几种常见方式,根据实际需求选择合适的调用方式即可。在实际开发中,应该遵循模块化编程的思想,将代码分为独立的模块或包

python 写的测试框架怎么和pyqt5画的UI结合

将Python编写的测试框架与PyQt5编写的UI结合有多种方法:

  1. 直接使用Python脚本调用UI程序:将测试框架和UI程序分别编写,在Python脚本中直接调用UI程序。这种方式需要在UI程序中开放一些接口,如获取用户输入、执行操作等,并在测试框架中调用这些接口来完成测试任务。
  2. 将测试框架嵌入到UI程序中:使用PyQt5提供的QProcess模块,可以在UI程序中启动Python脚本并将其嵌入到UI程序中。通过信号和槽机制,UI程序可以和嵌入的Python脚本交互,完成测试任务。
  3. 使用Python库将测试框架和UI程序结合:例如,在Python中使用Selenium库编写自动化测试框架,可以实现在浏览器中进行GUI测试。此时,可以使用PyQt5编写一个简单的界面,让用户输入测试用例等信息,然后在Python脚本中调用Selenium库完成测试任务。

以上三种方法都需要对UI程序和测试框架做出相应的修改,以实现二者之间的协作。具体实现细节需要根据具体情况而定,但需要注意以下几点:

  • 在UI程序中调用Python脚本时,需要确保Python环境已经安装,并且测试框架可以被正确地调用。
  • 在Python脚本中调用UI程序时,需要确保PyQt5环境已经安装,并且UI程序可以被正确地调用。
  • 在UI程序和测试框架之间的信息交互时,需要注意线程安全、数据类型转换等问题。

总之,将Python编写的测试框架与PyQt5编写的UI结合需要耐心和技巧,需要对两种技术都有深入的理解和掌握

eval用法

eval是Python中的一个内置函数,用于执行字符串类型的表达式,并返回表达式的值。具体用法如下:

语法:

eval(expression[, globals[, locals]])

参数说明:

  • expression:要执行的字符串表达式,可以包含变量、运算符和函数调用等。
  • globals(可选):全局命名空间,如果指定了该参数,则在执行表达式时使用该命名空间;否则使用当前执行环境的全局命名空间。
  • locals(可选):局部命名空间,如果指定了该参数,则在执行表达式时使用该命名空间;否则使用当前执行环境的局部命名空间。

示例:

>>> x = 1
>>> y = 2
>>> z = eval('x + y')
>>> print(z)
3

>>> expr = 'list(range(10))'
>>> lst = eval(expr)
>>> print(lst)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

在第一个示例中,eval函数将字符串’x + y’转化为表达式x + y,并在当前的全局命名空间中执行该表达式,返回结果3。

在第二个示例中,eval函数将字符串’list(range(10))'转化为表达式list(range(10)),并在当前的全局命名空间中执行该表达式,返回结果[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]。

try - except(捕获和处理异常)

try-except 语句的基本语法如下:

try:
    # 可能会产生异常的代码块
except ErrorType1 as e1:
    # 处理 ErrorType1 类型的异常
except (ErrorType2, ErrorType3) as e23:
    # 处理多种类型的异常
except:
    # 处理其他类型的异常
else:
    # 如果 try 块中的代码没有出现任何异常,则执行该块
finally:
    # 无论是否产生异常,都会执行该块
  • try 块:包含可能会抛出异常的代码块。
  • except 块:当 try 代码块中出现指定的异常时,执行相应的 except 代码块。可以使用多个 except 块来处理不同类型的异常,也可以使用一个 except 块来处理所有类型的异常。
  • else 块(可选):在 try 块中的代码没有引发任何异常时,执行 else 块中的代码。
  • finally 块(可选):无论 try 块中的代码是否引发异常,finally 块中的代码都会被执行。

示例:

try:
    num1 = int(input("请输入第一个数:"))
    num2 = int(input("请输入第二个数:"))
    result = num1 / num2
    print(f"{num1} / {num2} = {result}")
except ZeroDivisionError as e:
    print("除数不能为0!")
except ValueError as e:
    print("输入无效!")
except Exception as e:
    print(f"发生了未知错误:{e}")
else:
    print("没有异常发生!")
finally:
    print("程序结束。")

在上面的示例中,try 块中尝试将用户输入的两个整数相除,并打印结果。如果除数为 0,则抛出 ZeroDivisionError 异常;如果输入无效(比如输入非数字字符串),则抛出 ValueError 异常;如果有其他类型的异常,则抛出通用 Exception 异常。在不同的 except 块中处理这些异常,并在最后使用 else 块和 finally 块输出相应的信息。

python request库

Python 中的 requests 库,requests 是一个 Python HTTP 客户端库,可以用于向网络服务器发送请求并获取响应。要使用 requests 库,在 Python 环境中先安装该库。

pip install requests

然后在 Python 文件中引入 requests 库:

import requests

requests 库提供了以下主要的 HTTP 方法:

  • requests.get(url, params=None, **kwargs):发送 GET 请求。
  • requests.post(url, data=None, json=None, **kwargs):发送 POST 请求。
  • requests.put(url, data=None, **kwargs):发送 PUT 请求。
  • requests.delete(url, **kwargs):发送 DELETE 请求。
  • requests.head(url, **kwargs):发送 HEAD 请求。
  • requests.patch(url, data=None, **kwargs):发送 PATCH 请求。
  • requests.options(url, **kwargs):发送 OPTIONS 请求。

示例:

import requests
response = requests.get('https://www.baidu.com')
print(response.status_code) *#* 打印状态码
print(response.text) *#* 打印响应内容
requests.get(url, params=None, **kwargs) 是 Python requests 模块中用于发送 HTTP GET 请求的函数。它返回一个 Response 对象,可以从中获取服务器响应的内容。

参数说明:

  • url:请求的 URL 地址。
  • params:(可选)传递给 URL 的参数,可以是字典或字符串格式。
  • **kwargs:(可选)其他参数,例如 headers、cookies、auth 等,详见文档说明。

返回值:

  • 如果请求成功,返回的 Response 对象包含服务器响应的内容;
  • 如果请求失败,会引发一个异常,如 TimeoutError、ConnectionError 等。

post和get的区别

POST 和 GET 是 HTTP 协议中最常用的两个请求方法,它们之间的主要区别在于传参方式、安全性和可见性。

1.传参方式:
GET 请求将参数附加在 URL 的末尾,以问号( ? )分隔参数和 URL。例如:

https://www.example.com/search?q=python

POST 请求则是通过请求体传递参数,将参数放在请求体中,并不会暴露在 URL 上。例如:

POST 
/submit-form HTTP/1.1
Host: www.example.com
username=john&password=123456

2.安全性:

GET 请求相对不太安全,因为请求参数暴露在 URL 中,容易被第三方获取,例如浏览器记录和代理服务器缓存。

POST 请求相对更安全一些,因为请求参数放在请求体中,不会被直接暴露出来,但仍然可能被网络攻击者截获并分析。

3.可见性:

GET 请求的参数可以在浏览器地址栏中看到,也可以被其他程序以及日志记录等方式获取,所以不应该使用 GET 请求来传递敏感数据。

POST 请求的参数不会在浏览器地址栏中显示,也不会被其他程序直接获取,但仍然可以被抓包工具捕获。

在传输非敏感数据时,可以使用 GET 请求;在传输敏感数据时,应该使用 POST 请求,并且在传输敏感数据时,可以通过加密等方式加强安全性。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值