Python套件、包、模块、TestCase和TestSuite的区别

2024-09-28 22:28:27 发布

您现在位置:Python中文网/ 问答频道 /正文

最佳猜测:

  • 方法def(self,maybeSomeVariables);实现某种目的的代码行
  • 函数-与方法相同,但返回
  • 类-方法/函数组
  • 模块-一个脚本,或一个或多个类。基本上是一个.py文件。在
  • Package—一个包含模块的文件夹,其中还包含一个u init_uu.py文件。在
  • 套房-只是一个词,经常被抛出,按惯例
  • TestCase-unittest的函数等价物
  • TestSuite-unittest的等价类(或模块?)在

我的问题是:这是完全正确的吗?我是否遗漏了列表中的任何层次结构块?在


Tags: 模块文件方法函数代码pyself目的
1条回答
网友
1楼 · 发布于 2024-09-28 22:28:27

我觉得你把根本不存在的差异放进去了。实际上并没有等级制度。在python中,所有的东西都是一个对象。这不是什么抽象的概念,但对于在使用python时如何考虑所创建的构造来说,这是非常基本的。一个对象就是一堆其他对象。是否使用new-style classes有一点微妙之处,但是如果没有一个好的理由,那么就使用并假设新样式的类。下面的所有内容都假设是新样式的类。在

如果一个对象是callable,则可以使用一对大括号的调用语法调用它,其中的参数是:my_callable(arg1, arg2)。为了可调用,对象需要实现__call__方法(或者在其C级类型定义中设置正确的字段)。在

在python中,一个对象有一个关联的type。类型描述如何构造对象。因此,例如,列表对象的类型是list,而函数对象的类型是function。类型本身属于type类型。您可以使用内置函数type()来查找类型。所有内置类型的列表可以在pythondocumentation中找到。类型实际上是可调用的对象,用于创建给定类型的实例。在

好了,现在已经确定了,给定对象的性质是由它的类型定义的。它描述了它所包含的对象。回到你的问题上来:

首先,组成某个对象的一组对象称为该对象的属性。这些属性可以是任何东西,但它们通常由方法和某种存储状态的方式(可能是int或{})组成。在

functionfunction类型的对象。关键的是,这意味着它将__call__方法作为一个属性,使其成为可调用的(__call__方法也是一个本身具有__call__方法的对象。它是__call__一直向下;)

在python世界中,class可以被视为一个类型,但通常用于引用不是内置的类型。这些对象用于创建其他对象。您可以用class关键字定义自己的类,要创建一个新样式的类,您必须从object(或其他一些新样式的类)继承。继承时,创建一个获取父类型的所有特征的类型,然后可以覆盖所需的位(并且可以覆盖所需的任何位)。当你通过调用一个类来创建一个对象时,它通常会被另一个类所创建。在

method是使用属性表示法调用的特殊类型的函数。也就是说,当它被创建时,2个额外的属性被添加到方法中(记住它是一个对象!)称为im_selfim_funcim_self我将用几句话来描述。im_func是一个实现该方法的函数。当方法被调用时,例如,foo.my_method(10),这相当于调用foo.my_method.im_func(im_self, 10)。这就是为什么当你定义一个方法时,你用一个你似乎没有使用的额外的第一个参数来定义它(如self)。在

当您在定义一个类时编写一组方法时,这些方法就变成了未绑定的方法。当您创建该类的实例时,这些方法将成为绑定的。{16>当你在绑定方法中添加一个参数时,{16>作为绑定方法存在。仍然可以调用类的unbound方法,但需要显式添加类实例作为第一个参数:

class Foo(object):

    def bar(self):
        print self
        print self.bar
        print self.bar.im_self # prints the same as self

我们可以展示当我们调用bar方法的各种表现形式时会发生什么:

^{pr2}$

综合以上所有因素,我们可以定义一个类,如下所示:

^{3}$

这将生成一个具有2个属性的类:a(即值为10)和bar的整数,这是一个未绑定的方法。我们可以看到MyFoo.a只有10。在

我们可以在运行时创建额外的属性,包括类方法内部和外部。考虑以下因素:

class MyFoo(object):
    a = 10

    def __init__(self):
        self.b = 20

    def bar(self):
        print self.a
        print self.b

    def eep(self):
        print self.c

__init__只是从类创建对象后立即调用的方法。在

>>> foo = Foo()
>>> foo.bar()
10
20
>>> foo.eep()
AttributeError: 'MyFoo' object has no attribute 'c'
>>> foo.c = 30
>>> foo.eep()
30

这个例子展示了在运行时(即从类创建对象之后)向类实例添加属性的两种方法。在

我希望你能看到,TestCase和TestSuite只是用来创建测试对象的类。它们没有什么特别之处,只是它们碰巧有一些有用的特性来编写测试。你可以子类化和重写它们到你的心的内容!在

关于您的特定点,方法和函数都可以返回它们想要的任何内容。在

你对模块、软件包和套件的描述似乎很合理。注意模块也是对象!在

相关问题 更多 >