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? -- https://mail.python.org/mailman/listinfo/python-list