Skip to content

Commit 421b477

Browse files
committed
Removed writeonly attribute methods per owner request. Use cpp_function() for null reader
1 parent d333803 commit 421b477

File tree

2 files changed

+7
-40
lines changed

2 files changed

+7
-40
lines changed

include/pybind11/pybind11.h

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1174,14 +1174,6 @@ class class_ : public detail::generic_type {
11741174
return *this;
11751175
}
11761176

1177-
template <typename C, typename D, typename... Extra>
1178-
class_ &def_writeonly(const char *name, D C::*pm, const Extra& ...extra) {
1179-
static_assert(std::is_base_of<C, type>::value, "def_writeonly() requires a class member (or base class member)");
1180-
cpp_function fset([pm](type &c, const D &value) { c.*pm = value; }, is_method(*this));
1181-
def_property_writeonly(name, fset, extra...);
1182-
return *this;
1183-
}
1184-
11851177
template <typename D, typename... Extra>
11861178
class_ &def_readwrite_static(const char *name, D *pm, const Extra& ...extra) {
11871179
cpp_function fget([pm](object) -> const D &{ return *pm; }, scope(*this)),
@@ -1197,58 +1189,31 @@ class class_ : public detail::generic_type {
11971189
return *this;
11981190
}
11991191

1200-
template <typename D, typename... Extra>
1201-
class_ &def_writeonly_static(const char *name, D *pm, const Extra& ...extra) {
1202-
cpp_function fset([pm](object, const D &value) { *pm = value; }, scope(*this));
1203-
def_property_writeonly_static(name, fset, extra...);
1204-
return *this;
1205-
}
1206-
12071192
/// Uses return_value_policy::reference_internal by default
12081193
template <typename Getter, typename... Extra>
12091194
class_ &def_property_readonly(const char *name, const Getter &fget, const Extra& ...extra) {
12101195
return def_property_readonly(name, cpp_function(method_adaptor<type>(fget)),
12111196
return_value_policy::reference_internal, extra...);
12121197
}
12131198

1214-
template <typename Setter, typename... Extra>
1215-
class_ &def_property_writeonly(const char *name, const Setter &fset, const Extra& ...extra) {
1216-
return def_property_writeonly(name, cpp_function(method_adaptor<type>(fset)),extra...);
1217-
}
1218-
12191199
/// Uses cpp_function's return_value_policy by default
12201200
template <typename... Extra>
12211201
class_ &def_property_readonly(const char *name, const cpp_function &fget, const Extra& ...extra) {
12221202
return def_property(name, fget, cpp_function(), extra...);
12231203
}
12241204

1225-
template <typename... Extra>
1226-
class_ &def_property_writeonly(const char *name, const cpp_function &fset, const Extra& ...extra) {
1227-
return def_property(name, cpp_function(), fset, extra...);
1228-
}
1229-
12301205
/// Uses return_value_policy::reference by default
12311206
template <typename Getter, typename... Extra>
12321207
class_ &def_property_readonly_static(const char *name, const Getter &fget, const Extra& ...extra) {
12331208
return def_property_readonly_static(name, cpp_function(fget), return_value_policy::reference, extra...);
12341209
}
12351210

1236-
template <typename Setter, typename... Extra>
1237-
class_ &def_property_writeonly_static(const char *name, const Setter &fset, const Extra& ...extra) {
1238-
return def_property_writeonly_static(name, cpp_function(fset), extra...);
1239-
}
1240-
12411211
/// Uses cpp_function's return_value_policy by default
12421212
template <typename... Extra>
12431213
class_ &def_property_readonly_static(const char *name, const cpp_function &fget, const Extra& ...extra) {
12441214
return def_property_static(name, fget, cpp_function(), extra...);
12451215
}
12461216

1247-
template <typename... Extra>
1248-
class_ &def_property_writeonly_static(const char *name, const cpp_function &fset, const Extra& ...extra) {
1249-
return def_property_static(name, cpp_function(), fset, extra...);
1250-
}
1251-
12521217
/// Uses return_value_policy::reference_internal by default
12531218
template <typename Getter, typename Setter, typename... Extra>
12541219
class_ &def_property(const char *name, const Getter &fget, const Setter &fset, const Extra& ...extra) {

tests/test_methods_and_attributes.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -279,17 +279,19 @@ TEST_SUBMODULE(methods_and_attributes, m) {
279279
.def(py::init<>())
280280
.def_readonly("def_readonly", &TestProperties::value)
281281
.def_readwrite("def_readwrite", &TestProperties::value)
282-
.def_writeonly("def_writeonly", &TestProperties::value)
283-
.def_property_writeonly("def_property_writeonly", &TestProperties::set)
282+
.def_property("def_writeonly", py::cpp_function(),
283+
[](TestProperties& s,int v) { s.value = v; } )
284+
.def_property("def_property_writeonly", py::cpp_function(), &TestProperties::set)
284285
.def_property_readonly("def_property_readonly", &TestProperties::get)
285286
.def_property("def_property", &TestProperties::get, &TestProperties::set)
286287
.def_readonly_static("def_readonly_static", &TestProperties::static_value)
287288
.def_readwrite_static("def_readwrite_static", &TestProperties::static_value)
288-
.def_writeonly_static("def_writeonly_static", &TestProperties::static_value)
289+
.def_property_static("def_writeonly_static", py::cpp_function(),
290+
[](py::object, int v){ TestProperties::static_value = v; })
289291
.def_property_readonly_static("def_property_readonly_static",
290292
[](py::object) { return TestProperties::static_get(); })
291-
.def_property_writeonly_static("def_property_writeonly_static",
292-
[](py::object, int v) { return TestProperties::static_set(v); })
293+
.def_property_static("def_property_writeonly_static", py::cpp_function(),
294+
[](py::object, int v) { return TestProperties::static_set(v); })
293295
.def_property_static("def_property_static",
294296
[](py::object) { return TestProperties::static_get(); },
295297
[](py::object, int v) { TestProperties::static_set(v); })

0 commit comments

Comments
 (0)