CPython Class variable exposed to Python is altered.
Peter Otten
__peter__ at web.de
Wed Apr 12 04:51:35 EDT 2017
Vincent Vande Vyvre wrote:
> Le 12/04/17 à 08:57, Vincent Vande Vyvre a écrit :
>> Hi,
>>
>> Learning CPython, I've made this simple exercice, a module test which
>> contains an object Test.
>>
>> The object Test has an attribute name, fixed at instanciation.
>>
>> So, I try my code with a script:
>>
>> -------------------------------------------
>> from test import Test
>>
>> for n in ("The name", "Foo", "Spam"):
>> t = Test(n)
>> print("%s --> %s" %(n, t.name))
>> -------------------------------------------
>>
>> And the return:
>>
>> Uhe name --> Uhe name
>> Goo --> Goo
>> Tpam --> Tpam
>>
>> As we can see, the first letter is changed with the next letter in
>> alphabetical order, but not only for the attribute name, also for the
>> reference n.
> if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|", kwlist, &name))
> return -1;
>
> if (name) {
> tmp = self->name;
> Py_INCREF(name);
While I don't know how to do this properly you seem to be applying
Py_INCREF() to a C string rather than a Python string object. C being C you
can cast anything to anything else...
Aren't there any warnings at compile time?
More information about the Python-list
mailing list