对象已在蟒蛇

对象已在蟒蛇

问题描述:

“在Python每一件事情都是一个对象”对象已在蟒蛇

所以,应该所有对象必须有属性和方法既没有属性也没有方法?

我读下面statemts在教程网站,你可以给在具有既没有属性也没有方法蟒蛇例如预先定义的对象?

有些对象既没有属性也没有方法

+0

大概你的意思是http://www.diveintopython.net/getting_to_know_python/everything_is_an_object.html,所以你有没有读过第三章承诺的后续行动? – jonrsharpe

+0

可能重复[是否所有的东西都是python中的对象,像ruby?](http://*.com/questions/865911/is-everything-an-object-in-python-like-ruby) – direprobs

一切都在Python确实是一种对象,这是事实。即使是班级本身也被认为是对象,他们确实是内建类type的产物,这也不足为奇。但在大多数情况下,对象几乎肯定会继承属性,包括方法或数据。

因此,所有的对象都应该有属性和方法吗?

不一定所有对象都有自己的属性。例如,一个对象可以从它的类和它的类的超类继承这个属性,但是这个属性或方法不一定存在于这个实例的名字空间字典中。事实上,情况的命名空间可以是空如下所示:

class Foo: 
    pass 

a = A() 
print(a.__dict__) 

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

你可以给一个既没有属性也没有方法的预定义对象的例子吗?

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

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

有模仿,没有属性的一个Python对象hackish的方式。

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() 

这个实例a,对于所有意图和目的,在纯Python,表现如同没有属性(你可以尝试在它hasattr)的对象。

在C扩展中可能有一种低级别的方法,通过在C中实现一种类型,从病理上阻止Python的对象实现工作。无论如何,这里的保证金太小,不适合写一个。

没有属性的预定义对象将会破坏预定义它的目的。