mirror of
https://github.com/pybind/pybind11.git
synced 2026-03-14 20:27:47 +00:00
Enable static properties (py::metaclass) by default
Now that only one shared metaclass is ever allocated, it's extremely cheap to enable it for all pybind11 types. * Deprecate the default py::metaclass() since it's not needed anymore. * Allow users to specify a custom metaclass via py::metaclass(handle).
This commit is contained in:
committed by
Wenzel Jakob
parent
08cbe8dfed
commit
dd01665e5a
@@ -126,6 +126,22 @@ def test_static_cls():
|
||||
instance.static_cls = check_self
|
||||
|
||||
|
||||
def test_metaclass_override():
|
||||
"""Overriding pybind11's default metaclass changes the behavior of `static_property`"""
|
||||
from pybind11_tests import MetaclassOverride
|
||||
|
||||
assert type(ExampleMandA).__name__ == "pybind11_type"
|
||||
assert type(MetaclassOverride).__name__ == "type"
|
||||
|
||||
assert MetaclassOverride.readonly == 1
|
||||
assert type(MetaclassOverride.__dict__["readonly"]).__name__ == "pybind11_static_property"
|
||||
|
||||
# Regular `type` replaces the property instead of calling `__set__()`
|
||||
MetaclassOverride.readonly = 2
|
||||
assert MetaclassOverride.readonly == 2
|
||||
assert isinstance(MetaclassOverride.__dict__["readonly"], int)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("access", ["ro", "rw", "static_ro", "static_rw"])
|
||||
def test_property_return_value_policies(access):
|
||||
from pybind11_tests import TestPropRVP
|
||||
|
||||
Reference in New Issue
Block a user