103python类函数、成员函数、静态函数、类变量、成员变量、及其unittest前后置

复习巩固下:

1、python中类函数、成员函数、静态函数、类变量、成员变量

​ 在Python中,类函数、成员函数和静态函数都是类的函数,它们的不同之处在于它们的作用域和调用方式。

2、unittest前后置

​ 在编写单元测试时,经常需要在测试方法执行前或执行后执行某些特定的代码。这些代码通常称为前置和后置条件。常见的前置和后置条件包括:创建测试对象、准备测试数据、清理测试数据、关闭数据库连接等等。unittest提供了一些装饰器来实现前置和后置条件。

一:

1、类函数(Class Method):类函数是定义在类上的函数,可以访问类变量和类方法。它们的第一个参数通常被命名为cls,表示类本身。可以使用@classmethod装饰器来定义类函数。

示例代码:

class MyClass:
    count = 0 # 类变量

    @classmethod
    def increase_count(cls):
        cls.count += 1

print(MyClass.count) # 0
MyClass.increase_count()
print(MyClass.count) # 1

2、成员函数(Instance Method):成员函数是定义在类中的函数,需要通过类的实例来调用。它们的第一个参数通常被命名为self,表示调用该方法的实例本身。成员函数可以访问类变量和成员变量。在定义时,不需要添加任何装饰器。

示例代码:

class MyClass:
    def __init__(self):
        self.count = 0 # 成员变量

    def increase_count(self):
        self.count += 1

my_object = MyClass()
print(my_object.count) # 0
my_object.increase_count()
print(my_object.count) # 1

3、静态函数(Static Method):静态函数是定义在类中的函数,它们与类和实例都没有直接关系。静态函数不能访问类变量和成员变量。在定义时,需要使用@staticmethod装饰器来定义静态函数。

示例代码:

class MyClass:
    @staticmethod
    def say_hello():
        print("Hello, World!")

MyClass.say_hello() # Hello, World!

4、类变量(Class Variable):类变量是定义在类上的变量,所有的类实例都可以访问它。类变量通常用于表示与类相关的状态或共享的数据。

示例代码:

class MyClass:
    count = 0 # 类变量

my_object = MyClass()
print(my_object.count) # 0
MyClass.count = 1
print(my_object.count) # 1

5、成员变量(Instance Variable):成员变量是定义在类实例上的变量,每个类实例都有自己的一组成员变量。成员变量通常用于表示与实例相关的状态或数据。

示例代码:

class MyClass:
    def __init__(self):
        self.count = 0 # 成员变量

my_object = MyClass()
print(my_object.count) # 0
my_object.count = 1
print(my_object.count) # 1

二:

下面是一个简单的例子,说明如何使用unittest的前置和后置条件:

import unittest

class TestStringMethods(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        print("setUpClass")

    @classmethod
    def tearDownClass(cls):
        print("tearDownClass")

    def setUp(self):
        print("setUp")

    def tearDown(self):
        print("tearDown")

    def test_upper(self):
        print("test_upper")
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        print("test_isupper")
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())

if __name__ == '__main__':
    unittest.main()

在上面的示例中,setUpClass()和tearDownClass()方法分别在测试类的所有测试方法之前和之后执行。setUp()和tearDown()方法在每个测试方法之前和之后执行。运行上述代码,将得到以下输出:

setUpClass
setUp
test_upper
tearDown
setUp
test_isupper
tearDown
tearDownClass

可以看到,setUpClass()和tearDownClass()方法仅在测试类的所有测试方法之前和之后执行一次,而setUp()和tearDown()方法在每个测试方法之前和之后执行。这使得我们可以在测试方法中使用相同的测试对象和测试数据,同时保持测试环境的干净和一致。

注意:前置和后置条件的执行顺序与测试方法的执行顺序无关。

posted @ 2023-03-16 14:04  __username  阅读(550)  评论(0编辑  收藏  举报

本文作者:DIVMonster

本文链接:https://www.cnblogs.com/guangzan/p/12886111.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。