mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-26 07:02:11 +00:00
Add py::str::format() method
This commit is contained in:
parent
67990d9e19
commit
66aa2728f4
@ -385,8 +385,18 @@ public:
|
|||||||
pybind11_fail("Unable to extract string contents! (invalid type)");
|
pybind11_fail("Unable to extract string contents! (invalid type)");
|
||||||
return std::string(buffer, (size_t) length);
|
return std::string(buffer, (size_t) length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename... Args>
|
||||||
|
str format(Args &&...args) const {
|
||||||
|
return attr("format").cast<object>()(std::forward<Args>(args)...);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline namespace literals {
|
||||||
|
/// String literal version of str
|
||||||
|
inline str operator"" _s(const char *s, size_t size) { return {s, size}; }
|
||||||
|
}
|
||||||
|
|
||||||
inline pybind11::str handle::str() const {
|
inline pybind11::str handle::str() const {
|
||||||
PyObject *strValue = PyObject_Str(m_ptr);
|
PyObject *strValue = PyObject_Str(m_ptr);
|
||||||
#if PY_MAJOR_VERSION < 3
|
#if PY_MAJOR_VERSION < 3
|
||||||
|
@ -210,5 +210,13 @@ test_initializer python_types([](py::module &m) {
|
|||||||
py::print("this goes to stderr", "file"_a=py_stderr);
|
py::print("this goes to stderr", "file"_a=py_stderr);
|
||||||
|
|
||||||
py::print("flush", "flush"_a=true);
|
py::print("flush", "flush"_a=true);
|
||||||
|
|
||||||
|
py::print("{a} + {b} = {c}"_s.format("a"_a="py::print", "b"_a="str.format", "c"_a="this"));
|
||||||
|
});
|
||||||
|
|
||||||
|
m.def("test_str_format", []() {
|
||||||
|
auto s1 = "{} + {} = {}"_s.format(1, 2, 3);
|
||||||
|
auto s2 = "{a} + {b} = {c}"_s.format("a"_a=1, "b"_a=2, "c"_a=3);
|
||||||
|
return py::make_tuple(s1, s2);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -231,5 +231,14 @@ def test_print(capture):
|
|||||||
*args-and-a-custom-separator
|
*args-and-a-custom-separator
|
||||||
no new line here -- next print
|
no new line here -- next print
|
||||||
flush
|
flush
|
||||||
|
py::print + str.format = this
|
||||||
"""
|
"""
|
||||||
assert capture.stderr == "this goes to stderr"
|
assert capture.stderr == "this goes to stderr"
|
||||||
|
|
||||||
|
|
||||||
|
def test_str_api():
|
||||||
|
from pybind11_tests import test_str_format
|
||||||
|
|
||||||
|
s1, s2 = test_str_format()
|
||||||
|
assert s1 == "1 + 2 = 3"
|
||||||
|
assert s1 == s2
|
||||||
|
Loading…
Reference in New Issue
Block a user