GVKun编程网logo

Python是否具有类原型(或前向声明)?(python有类和对象吗)

4

对于Python是否具有类原型感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解或前向声明?,并且为您提供关于c–原型声明和前向声明之间的区别?、Django模型:两个类之间的相互引用,并且无

对于Python是否具有类原型感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解或前向声明?,并且为您提供关于c – 原型声明和前向声明之间的区别?、Django模型:两个类之间的相互引用,并且无法在python中使用前向声明、Go 是否具有类似于 Python 的“if x in”结构?、Go是否具有类似于Python的“ if x in”构造?的宝贵知识。

本文目录一览:

Python是否具有类原型(或前向声明)?(python有类和对象吗)

Python是否具有类原型(或前向声明)?(python有类和对象吗)

我在文件中有一系列Python类。一些类引用其他类。

我的代码是这样的:

class A():    passclass B():    c = C()class C():    pass

尝试运行它,我得到了NameError: name ''C'' is notdefined。足够公平,但是有什么方法可以使它起作用,还是我必须手动重新排列我的课程才能容纳?在C
++中,我可以创建一个类原型。Python是否具有等效功能?

(我实际上是在玩Django模型,但是我没有尝试使事情复杂化)。

答案1

小编典典

在Python中,您本身并不会创建原型,但是您需要了解“类属性”和实例级属性之间的区别。在上面显示的示例中,您是在类B上声明一个类属性,而不是实例级属性。

这是您要寻找的:

class B():    def __init__(self):        self.c = C()

c – 原型声明和前向声明之间的区别?

c – 原型声明和前向声明之间的区别?

所以我有这个代码:

class xx
{
    int getnum(); //Is this a forward declaration or a prototype declaration and why?
};

int xx::getnum()
{
    return 1+3;
}

所以这个问题已经在代码中得到了评论,但是:

是int getnum();前瞻性声明或原型声​​明,为什么?

解决方法

“前向声明”和“原型声明”这两个术语都没有在C标准中定义,因此非常严格地说,它既不是.这只是一个宣言.如果您想要更具体,可以将其称为非定义声明,或“不是定义的声明”.

当在标准中使用“前向声明”一词时,它们用于引用声明但未定义它们声明的事物(函数或类)的声明.根据这种用法,int getnum()因此是一个前向声明.

函数的“原型声明”在标准(1)中使用得更少,并且主要是在谈论与[C]的兼容性时.但是,在使用时,它指的是与该函数的前向声明完全相同的概念.顺便说一下,你也可以调用int getnum();原型声明.

总而言之,术语“前向声明”和“原型声明”没有正式的定义,但从它们通常使用和理解的方式来看,int getnum();可以描述为.

(1)然而,标准中定义了类似术语“函数原型范围”(C 17 N4659 [basic.scope.proto] 6.3.4 / 1).它在非定义函数声明中建立函数参数名称的范围,它是最接近的封闭函数声明符.

Django模型:两个类之间的相互引用,并且无法在python中使用前向声明

Django模型:两个类之间的相互引用,并且无法在python中使用前向声明

我定义了两个模型,每个模型都互相引用,如下所示:

class User(models.Model):    # ...    loves = models.ManyToManyField(Article, related_name=''loved_by'')class Article(models.Model):    # ...    author = models.ForeignKey(User)

您会发现,问题在于两个类都相互引用。无论这两个类的实现顺序如何,python总是会引发NameError异常,抱怨其中一个类都未定义。

答案1

小编典典

您可以在docs中找到解决方案:

如果需要在尚未定义的模型上创建关系,则可以使用模型的名称,而不是模型对象本身:

class Car(models.Model):    manufacturer = models.ForeignKey(''Manufacturer'')    # ...class Manufacturer(models.Model):    # ...

Go 是否具有类似于 Python 的“if x in”结构?

Go 是否具有类似于 Python 的“if x in”结构?

如果不遍历整个数组,如何x使用 Go检查数组中是否存在?语言有结构吗?

像Python: if "x" in array: ...

答案1

小编典典

在 Go 中没有内置的操作符可以做到这一点。您需要遍历数组。您可以编写自己的函数来执行此操作,如下所示:

func stringInSlice(a string, list []string) bool {    for _, b := range list {        if b == a {            return true        }    }    return false}

如果您希望能够在不遍历整个列表的情况下检查成员资格,则需要使用映射而不是数组或切片,如下所示:

visitedURL := map[string]bool {    "http://www.google.com": true,    "https://paypal.com": true,}if visitedURL[thisSite] {    fmt.Println("Already been here.")}

Go是否具有类似于Python的“ if x in”构造?

Go是否具有类似于Python的“ if x in”构造?

如果不 遍历整个数组,如何x使用Go 检查数组中是否存在?语言有结构吗?

像Python: if "x" in array: ...

今天的关于Python是否具有类原型或前向声明?的分享已经结束,谢谢您的关注,如果想了解更多关于c – 原型声明和前向声明之间的区别?、Django模型:两个类之间的相互引用,并且无法在python中使用前向声明、Go 是否具有类似于 Python 的“if x in”结构?、Go是否具有类似于Python的“ if x in”构造?的相关知识,请在本站进行查询。

本文标签: