mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-22 13:15:12 +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)");
|
||||
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 {
|
||||
PyObject *strValue = PyObject_Str(m_ptr);
|
||||
#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("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
|
||||
no new line here -- next print
|
||||
flush
|
||||
py::print + str.format = this
|
||||
"""
|
||||
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