我是Python的新手…并且来自Java的背景,如果可以说明这一点的话。
我正在尝试了解Python中的多态性。也许问题在于我期望将我已经知道的概念投影到Python中。但是我整理了以下测试代码:
class animal(object):
"empty animal class"
class dog(animal):
"empty dog class"
myDog = dog()
print myDog.__class__ is animal
print myDog.__class__ is dog
从我习惯的多态性(例如java的多态性)来看instanceof
,我希望这两个语句都能显示为true,因为dog的实例 既是 动物又 是
狗。但是我的输出是:
False
True
我想念什么?
is
Python中的运算符检查两个参数是否引用内存中的同一对象;它不像is
C#中的运算符。
从文档:
运算符是否测试对象标识:并且仅当x和y是同一对象时,x is y才是true。x不是y会产生反真值。
在这种情况下,您要寻找的是isinstance
。
如果object参数是classinfo参数或其(直接或间接)子类的实例,则返回true。
>>> class animal(object): pass
>>> class dog(animal): pass
>>> myDog = dog()
>>> isinstance(myDog, dog)
True
>>> isinstance(myDog, animal)
True
但是,惯用的Python指示您(几乎)从不进行类型检查,而是依靠鸭子类型进行多态行为。使用isinstance
理解继承没有错,但是通常应该在“生产”代码中避免使用继承。
问题内容: 如何在Python中声明静态属性? 这里写了我如何声明一个方法: Python中的静态方法? 问题答案: 在Python的类级别定义的所有变量均被视为静态 在类中,您可以使用相同的名称拥有两个不同的变量(一个静态变量和一个普通变量)。不要困惑。
问题内容: 我已经成功地使用了Python属性,但看不到它们如何工作。如果我取消引用类之外的属性,我只会得到一个类型的对象: 但是,如果我将一个属性放在一个类中,则行为会大不相同: 我注意到未绑定仍然是对象,因此类实例化必须在做魔术,但是那是什么魔术呢? 问题答案: 正如其他人指出的那样,它们使用称为描述符的语言功能。 当您通过类访问实际属性对象时,返回该属性对象的原因在于该属性如何实现特殊方法:
问题内容: 假设我创建了一个类的实例,并想为其公共属性分配一些值。通常,这将是这样完成的: 但是,如果编写一个将类作为参数的函数,而我想动态地为该类的公共属性分配一些值,那就是通过变量和循环(不知道有多少个或被称为什么)。 ) 显而易见的是: 但这是行不通的。 有任何想法吗? 问题答案:
问题内容: 我想知道rstrip和lstrip如何在python中工作。说,如果我有一个字符串 剥离单词如何工作? 理想情况下,输出应该是“ thist”(对于第一种情况)和“ that”(对于第二种情况)对吗? 还是像正则表达式一样,匹配每个字符,以及最后看到的哪一个字符都会删除(对于第三种情况)? 注意:我不是在寻找替换,我只是想知道从字符串中删除子字符串时,strip的工作方式。 问题答案:
当我将inplace属性的值更改为False时,索引"a"中的元素未删除,但当我更改inplace=True value at index"a"时删除。我不明白它是如何工作的。
问题内容: 我想找出Python中某个方法的优点(它接收的参数数量)。现在我正在这样做: 我希望能够实现这一目标: 更新 :现在上面的函数无法使用内置类型,对此的任何帮助也将不胜感激: 问题答案: Python标准库中的模块是您的朋友- 请参阅在线文档! 返回四个选项的元组,:是“主元数”,但参数数量可以从任何东西到无穷大,如果你有和/或没有,而一些参数可以省略(默认和)如果不是。你怎么把它变成一