Re: Can we create an_object = object() and add attribute like for a class?



Pierre Rouleau <prouleau@xxxxxxxxxxxxxxxxxx> wrote:

Hi all,

Is there any reason that under Python you cannot instantiate the object
class and create any attributes like you would be able for a normal class?

Yep: instances of type object do not have a __dict__ and therefore there
is no place to put any attributes. This is necessary to allow ANY
subclass of object, and thus any type whatsoever, to lack a per-instance
__dict__ (and thus to save its per-instance memory costs), since by the
principle of inheritance (known as Liskov substutition, or also as the
"IS-A" rule) a subclass cannot _remove_ superclass attributes, so if the
universal superclass had a __dict__ so would every type in Python.

Being able to do it would seem a natural way of declaring namespaces.

I find that ns = type('somename', (), dict(anattribute=23)) isn't too
bad to make a namespace ns, though it has some undesirable issues (e.g.,
ns is implicitly callable, which may make little sense for a namespace).

At any rate, any natural way of declaring a namespace SHOULD allow
arbitrary named arguments in the instantiation call -- bending
principles to give each instance of object a __dict__ would still not
fix that, so that wouldn't do much. I think it's worth the minor bother
to write out something like

class Namespace(object):
def __init__(self, **kwds): self.__dict__ = kwds

and I generally go further anyway, by defining at least a repr that
shows the attributes' names and values (very useful for debugging...).


Alex
.



Relevant Pages

  • Re: ProgID in .NET?
    ... The ProgID has the form Project.ClassName.Version. ... version it is possible to instantiate COM objects from different versions ... When a class from a .NET assembly is instantiated its namespace and class ... The nice part about COM is that you can choose as a developer if you want to use a specific version of a COM object or not without the vendor of the DLL facing the problem we ran now into: If we don't change the namespace you can't use different versions in the same process. ...
    (microsoft.public.dotnet.languages.vc)
  • Re: Can we create an_object = object() and add attribute like for a class?
    ... Is there any reason that under Python you cannot instantiate the object ... I was under the impresssion that instances of type object did have a __dict__ but was hidden for some reason. ... which may make little sense for a namespace). ... any natural way of declaring a namespace SHOULD allow ...
    (comp.lang.python)
  • Gettype() returning a null
    ... html = "Hello World" ... public string emit{ ... In my webpage, I am trying to instantiate myObject dynamically, like ... My Type t will return null unless I include the CMS namespace in the ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Submitting an Array to a Webservice.
    ... You have to create an class with the structure of your array... ... instantiate it where you want to use...see... ... Namespace DataTypesVB.Enumerations ... Public Class Sku ...
    (microsoft.public.dotnet.framework.webservices)
  • Re: HOWTO Overcome missing namespace declaration in root node
    ... the tag of the root element, including all namespace definitions ... the line of code where you instantiate the XmlSerializer ...
    (microsoft.public.dotnet.xml)