我对 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/