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

标签 python function class object

我对 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​​ 中,我有带有适当导入的 doesitfloat() 函数

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...?抱歉,这让我很困惑。

最佳答案

Python 是一种动态类型语言。

在许多语言中,您必须使用变量显式声明类型,例如在 C# 中:

Duck duck = new Duck();
...
duck = new Frog(); // This throws an error in a statically typed language

在Python中,每个变量都是对Python对象的引用。这些对象知道它们自己的类型,并包含它们所构造的类或基元的属性和方法。

duck = Duck()
...
duck = Frog() # This changes the duck variable to reference a new Frog object instead

如果尝试访问不存在的对象的成员,python 将抛出错误。

您可以使用 isinstance() 函数检查变量是否实际上引用了 Duck:

if isinstance(duck, Duck):
    # ... now we know duck is a Duck or Duck sub-class

关于python - 我的函数如何知道它正在接收什么类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54470074/

相关文章:

python - Pandas 中 DataFrame 的插值

python - 如果只调用 super.__init__ 是否需要 __init__?

c++ - 通过函数传递引用?

Jquery setInterval() 不起作用

java - 编译错误java.lang.nullpointerException

java - 当我知道Java中的类名称为字符串时,如何获取子类实例?

java - 我如何使用泛型为我的方法使用变量返回值?

Python 反转列表的每两个元素

python - math 和 numpy 都给出 sin(10) 的 "incorrect"值

php - 在php中创建插入函数