A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://mail.python.org/pipermail/python-dev/2002-March/020641.html below:

[Python-Dev] setting class attributes from C?

[Python-Dev] setting class attributes from C?Guido van Rossum guido@python.org
Tue, 05 Mar 2002 08:04:27 -0500
> Has anyone tried setting class attributes on a new-style class in C?
> The file sandbox/datetime/datetime.py has code that does this:
> 
> class datetime(basetime):
>     ...
> 
> datetime.min = datetime(...)
> datetime.max = datetime(...)
> 
> I can easily add descriptors in the C version so that min and max are
> defined on instances, but using PyObject_SetAttrString() using the new
> class:
> 
>     tmp = create_datetime(...);
>     if (datetime_min == NULL)
>         return;
>     if (PyObject_SetAttrString((PyObject *) &PyDateTime_Type,
>                                "min", datetime_min) < 0)
>         return;
> 
> produces this exception:
> 
> Traceback (most recent call last):
>   File "test_cdatetime.py", line 9, in ?
>     from _datetime import datetime, MINYEAR, MAXYEAR
> TypeError: can't set attributes of built-in/extension type 'datetime.datetime'
> 
> (where _datetime is the C extension that implements the C version of
> the type).

Type objects declared statically (as a pre-initialized static or
global C struct) are considered immutable.

If you want to modify the dict during module initialization in C, you
can access it as the tp_dict member of the type object.  It is
initialized by PyType_Ready().

The subclass trick that Jeremy mentioned is good if you need to do it
in Python.

I think it works David Abraham because he has a custom metaclass; this
approach doesn't apply to adding types to the core language.

--Guido van Rossum (home page: http://www.python.org/~guido/)



RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4