在python中既没有属性也没有方法的对象

2024-09-29 21:55:53 发布

您现在位置:Python中文网/ 问答频道 /正文

'Every thing in python is an object'

那么,所有的对象都应该有属性和方法吗?你知道吗

我在教程站点中读到了下面的statemts,您能举一个python中既没有属性也没有方法的预定义对象的例子吗?你知道吗

Some objects have neither attributes nor methods


Tags: 对象方法inan属性objectsobject站点
2条回答

Python中的所有东西都是对象,这是事实。甚至类本身也被认为是对象,它们实际上是内置类type的产物,这也不足为奇地成为对象。但在大多数情况下,对象几乎肯定会继承包括方法或数据在内的属性。你知道吗

So, should all objects have to have attributes and methods ?

并非所有对象都有自己的属性。例如,对象可以从其类和类的超类继承属性,但该属性或方法不一定存在于实例的命名空间字典中。实际上,实例的名称空间可以是空的,如下所示:

class Foo: 
    pass 

a = A()
print(a.__dict__) 

a这里除了从它的类继承的属性之外没有任何属性,因此如果您通过内置属性检查它的名称空间__dict__,您会发现名称空间是一个空字典。但是你可能想知道a.__dict__不是a的属性吗?区分类级属性从类或其超类继承的属性和实例属性属于实例且通常位于其命名空间__dict__中的属性。你知道吗

Could you give example of pre-defined object in python that has neither attributes nor methods ?

如果你说的是预定义对象,一个内置对象,我无法想象这样的场景。同样,即使对象本身没有属性,也会有从它的类或类的超类继承的属性,如果在大多数情况下有任何超类的话。可能,我猜在这里,教程要求您创建一个类,该类不为其对象分配属性,就像我上面包含的代码一样。你知道吗

这已经更好地回答了你的问题:Is everything an object in python like ruby?

有一种不带属性的方法来模拟Python对象。你知道吗

class NoAttr(object):
    def __getattribute__(self, attr):
        raise AttributeError("no attribute: %s" % attr)

    def __setattr__(self, attr, value):
        raise AttributeError("can't set attribute: %s" % attr)

    def __delattr__(self, attr):
        raise AttributeError("no attribute: %s" % attr)

a = NoAttr()

在纯Python中,这个实例a的行为就像没有属性的对象一样(您可以对它进行hasattr)。你知道吗

在C扩展中,可能有一种低级的方法来实现这一点:在C中实现一个类型,从病理学上阻止Python的对象实现工作。不管怎样,这里的页边空白太小了,写不出来。你知道吗

没有属性的预定义对象将无法达到预定义它的目的。你知道吗

相关问题 更多 >

    热门问题