猿问

我的函数如何知道它正在接收什么类?

我对 Python 非常陌生,我只是在深入研究整个类/对象的理解领域。这是我真正在努力解决的问题:如果我在文件duck.py 中有一个带有属性和成员函数的“duck”类,并且我正在使用witch.py 中的一个函数来接收duck 类。我发出import 语句


import duck

然后在我的函数中:


def doesitfloat(myduck, mywitch):

    if myduck.boyancy() == 'floats':

    ...

“doesitfloat”如何知道 myduck 是具有所述属性/成员函数的鸭子对象?我想我了解了类的一般概念,但是当我创建一个类时,我如何在其他地方使用它?


编辑... 我的第一篇文章和 python 新手 - 我能说什么。让我阐述..


在我的类文件duck.py 中,我有:


class duck:

    def buoyancy(self):

        return True

在另一个文件 witch.py 中,我有我的 doitfloat() 函数和适当的导入


import duck


def doesitfloat(myduck, mywitch)

    if myduck.buoyancy() == 'floats':

    ...

'doesitfloat' 如何知道 myduck 是对象还是类型鸭子?现在,在另一段代码中 - 甚至可能在第三个文件中,声明了适当的导入,我有以下内容:


someduck = duck

somewitch = witch  


testingsomething = doesitfloat(someduck, somewitch)

很明显,这个类是在我的第三个文件中声明的,并且在本地我已经声明了 someduck 和 somewitch 对象。然而,函数 'doesitfloat' 从未真正被告知它是一个鸭子对象。在其他语言中,'doesitfloat' 的声明会明确说明参数的类型,但是 python... ?? 对不起,这让我感到困惑。


德玛西亚99
浏览 126回答 2
2回答

aluckdog

事实上,你刚刚意识到 python 中的一个指针,它甚至被称为鸭子编程,所以如果它像鸭子一样走路和说话,它就是鸭子。程序不知道给定的对象是否具有上述方法,它会尝试访问它(如果找不到,则返回错误)。由使用代码的开发人员来遵守代码的目的。在 python 中,当您尝试运行时,myduck.boyancy()python 尝试访问boyancy变量引用的对象的属性/方法,myduck如果找不到任何属性/方法,它将返回错误。
随时随地看视频慕课网APP

相关分类

Python
我要回答