mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-11 08:03:55 +00:00
Merge pull request #333 from aldanor/feature/print
Add handle::repr() method
This commit is contained in:
commit
6fc7a30211
@ -27,6 +27,7 @@ Breaking changes queued for v2.0.0 (Not yet released)
|
|||||||
* ``make_iterator()`` improvements for better compatibility with various types
|
* ``make_iterator()`` improvements for better compatibility with various types
|
||||||
(now uses prefix increment operator)
|
(now uses prefix increment operator)
|
||||||
* ``arg()`` now accepts a wider range of argument types for default values
|
* ``arg()`` now accepts a wider range of argument types for default values
|
||||||
|
* Added ``repr()`` method to the ``handle`` class.
|
||||||
* Added support for registering structured dtypes via ``PYBIND11_NUMPY_DTYPE()`` macro.
|
* Added support for registering structured dtypes via ``PYBIND11_NUMPY_DTYPE()`` macro.
|
||||||
* Added ``PYBIND11_STR_TYPE`` macro which maps to the ``builtins.str`` type.
|
* Added ``PYBIND11_STR_TYPE`` macro which maps to the ``builtins.str`` type.
|
||||||
* Added a simplified ``buffer_info`` constructor for 1-dimensional buffers.
|
* Added a simplified ``buffer_info`` constructor for 1-dimensional buffers.
|
||||||
|
@ -155,6 +155,11 @@ public:
|
|||||||
return (py::str) py::bytes("boo", 3);
|
return (py::str) py::bytes("boo", 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test_print(const py::object& obj) {
|
||||||
|
std::cout << obj.str() << std::endl;
|
||||||
|
std::cout << obj.repr() << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
static int value;
|
static int value;
|
||||||
static const int value2;
|
static const int value2;
|
||||||
};
|
};
|
||||||
@ -187,6 +192,7 @@ void init_ex_python_types(py::module &m) {
|
|||||||
.def("get_bytes_from_str", &ExamplePythonTypes::get_bytes_from_str, "py::bytes from py::str")
|
.def("get_bytes_from_str", &ExamplePythonTypes::get_bytes_from_str, "py::bytes from py::str")
|
||||||
.def("get_str_from_string", &ExamplePythonTypes::get_str_from_string, "py::str from std::string")
|
.def("get_str_from_string", &ExamplePythonTypes::get_str_from_string, "py::str from std::string")
|
||||||
.def("get_str_from_bytes", &ExamplePythonTypes::get_str_from_bytes, "py::str from py::bytes")
|
.def("get_str_from_bytes", &ExamplePythonTypes::get_str_from_bytes, "py::str from py::bytes")
|
||||||
|
.def("test_print", &ExamplePythonTypes::test_print, "test the print function")
|
||||||
.def_static("new_instance", &ExamplePythonTypes::new_instance, "Return an instance")
|
.def_static("new_instance", &ExamplePythonTypes::new_instance, "Return an instance")
|
||||||
.def_readwrite_static("value", &ExamplePythonTypes::value, "Static value member")
|
.def_readwrite_static("value", &ExamplePythonTypes::value, "Static value member")
|
||||||
.def_readonly_static("value2", &ExamplePythonTypes::value2, "Static value member (readonly)")
|
.def_readonly_static("value2", &ExamplePythonTypes::value2, "Static value member (readonly)")
|
||||||
|
@ -71,6 +71,12 @@ print(instance.get_bytes_from_str().decode())
|
|||||||
print(instance.get_str_from_string().encode().decode())
|
print(instance.get_str_from_string().encode().decode())
|
||||||
print(instance.get_str_from_bytes().encode().decode())
|
print(instance.get_str_from_bytes().encode().decode())
|
||||||
|
|
||||||
|
class A(object):
|
||||||
|
__str__ = lambda _: 'this is a str'
|
||||||
|
__repr__ = lambda _: 'this is a repr'
|
||||||
|
|
||||||
|
instance.test_print(A())
|
||||||
|
|
||||||
from example import ConstructorStats
|
from example import ConstructorStats
|
||||||
|
|
||||||
cstats = ConstructorStats.get(ExamplePythonTypes)
|
cstats = ConstructorStats.get(ExamplePythonTypes)
|
||||||
|
@ -139,6 +139,8 @@ foo
|
|||||||
bar
|
bar
|
||||||
baz
|
baz
|
||||||
boo
|
boo
|
||||||
|
this is a str
|
||||||
|
this is a repr
|
||||||
Instances not destroyed: 1
|
Instances not destroyed: 1
|
||||||
### ExamplePythonTypes @ 0x1045b80 destroyed
|
### ExamplePythonTypes @ 0x1045b80 destroyed
|
||||||
Instances not destroyed: 0
|
Instances not destroyed: 0
|
||||||
|
@ -38,6 +38,7 @@ public:
|
|||||||
inline detail::accessor attr(handle key) const;
|
inline detail::accessor attr(handle key) const;
|
||||||
inline detail::accessor attr(const char *key) const;
|
inline detail::accessor attr(const char *key) const;
|
||||||
inline pybind11::str str() const;
|
inline pybind11::str str() const;
|
||||||
|
inline pybind11::str repr() const;
|
||||||
template <typename T> T cast() const;
|
template <typename T> T cast() const;
|
||||||
template <return_value_policy policy = return_value_policy::automatic_reference, typename ... Args>
|
template <return_value_policy policy = return_value_policy::automatic_reference, typename ... Args>
|
||||||
#if __cplusplus > 201103L
|
#if __cplusplus > 201103L
|
||||||
@ -383,6 +384,15 @@ inline pybind11::str handle::str() const {
|
|||||||
return pybind11::str(strValue, false);
|
return pybind11::str(strValue, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline pybind11::str handle::repr() const {
|
||||||
|
PyObject *strValue = PyObject_Repr(m_ptr);
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
|
PyObject *unicode = PyUnicode_FromEncodedObject(strValue, "utf-8", nullptr);
|
||||||
|
Py_XDECREF(strValue); strValue = unicode;
|
||||||
|
#endif
|
||||||
|
return pybind11::str(strValue, false);
|
||||||
|
}
|
||||||
|
|
||||||
class bytes : public object {
|
class bytes : public object {
|
||||||
public:
|
public:
|
||||||
PYBIND11_OBJECT_DEFAULT(bytes, object, PYBIND11_BYTES_CHECK)
|
PYBIND11_OBJECT_DEFAULT(bytes, object, PYBIND11_BYTES_CHECK)
|
||||||
|
Loading…
Reference in New Issue
Block a user