Skip to main content

Private Attribute (c++ implementation)

Introduction

This package provide a way to create the private attribute like "C++" does.

All Base API

from private_attribute import (PrivateAttrBase, PrivateWrapProxy)      # 1 Import public API

def my_generate_func(obj_id, attr_name):                           # 2 Optional: custom name generator
    return f"_hidden_{obj_id}_{attr_name}"

class MyClass(PrivateAttrBase, private_func=my_generate_func):     # 3 Inherit + optional custom generator
    __private_attrs__ = ['a', 'b', 'c', 'result', 'conflicted_name']  # 4 Must declare all private attrs

    def __init__(self):
        self.a = 1
        self.b = 2
        self.c = 3
        self.result = 42                    # deliberately conflicts with internal names

    # Normal methods can freely access private attributes
    def public_way(self):
        print(self.a, self.b, self.c)

    # Real-world case: method wrapped by multiple decorators
    @PrivateWrapProxy(memoize())                                   # 5 Apply any decorator safely
    @PrivateWrapProxy(login_required())                            # 5 Stack as many as needed
    @PrivateWrapProxy(rate_limit(calls=10))                        # 5
    def expensive_api_call(self, x):                               # First definition (will be wrapped)
        def inner(...):
            return some_implementation(self.a, self.b, self.c, x)
        inner(...)
        return heavy_computation(self.a, self.b, self.c, x)

    # Fix decorator order + resolve name conflicts
    @PrivateWrapProxy(expensive_api_call.result.name2, expensive_api_call)    # 6 Chain .result to push decorators down
    @PrivateWrapProxy(expensive_api_call.result.name1, expensive_api_call)    # 6 Resolve conflict with internal names
    def expensive_api_call(self, x):         # Final real implementation
        return heavy_computation(self.a, self.b, self.c, x)


# ====================== Usage ======================
obj = MyClass()
obj.public_way()                    # prints: 1 2 3

print(hasattr(obj, 'a'))            # False – truly hidden from outside
print(obj.expensive_api_call(10))   # works with all decorators applied
# API Purpose Required?
1 PrivateAttrBase Base class – must inherit Yes
1 PrivateWrapProxy Decorator wrapper for arbitrary decorators When needed
2 private_func=callable Custom hidden-name generator Optional
3 Pass private_func in class definition Same as above Optional
4 __private_attrs__ list Declare which attributes are private Yes
5 @PrivateWrapProxy(...) Make any decorator compatible with private attributes When needed
6 method.result.xxx chain + dummy wrap Fix decorator order and name conflicts When needed

Usage

This is a simple usage about the module:

from private_attribute import PrivateAttrBase

class MyClass(PrivateAttrBase):
    __private_attrs__ = ['a', 'b', 'c']
    def __init__(self):
        self.a = 1
        self.b = 2
        self.c = 3

    def public_way(self):
        print(self.a, self.b, self.c)

obj = MyClass()
obj.public_way()  # (1, 2, 3)

print(hasattr(obj, 'a'))  # False
print(hasattr(obj, 'b'))  # False
print(hasattr(obj, 'c'))  # False

All of the attributes in __private_attrs__ will be hidden from the outside world, and stored by another name.

You can use your function to generate the name. It needs the id of the obj and the name of the attribute:

def my_generate_func(obj_id, attr_name):
    return some_string

class MyClass(PrivateAttrBase, private_func=my_generate_func):
    __private_attrs__ = ['a', 'b', 'c']
    def __init__(self):
        self.a = 1
        self.b = 2
        self.c = 3

    def public_way(self):
        print(self.a, self.b, self.c)

obj = MyClass()
obj.public_way()  # (1, 2, 3)

If the method will be decorated, the property, classmethod and staticmethod will be supported. For the other, you can use the PrivateWrapProxy to wrap the function:

from private_attribute import PrivateAttrBase, PrivateWrapProxy

class MyClass(PrivateAttrBase):
    __private_attrs__ = ['a', 'b', 'c']
    @PrivateWrapProxy(decorator1())
    @PrivateWrapProxy(decorator2())
    def method1(self):
        ...

    @PrivateWrapProxy(method1.attr_name, method1) # Use the argument "method1" to save old func
    def method1(self):
        ...

    @PrivateWrapProxy(decorator3())
    def method2(self):
        ...

    @PrivateWrapProxy(method2.attr_name, method2) # Use the argument "method2" to save old func
    def method2(self):
        ...

The PrivateWrapProxy is a decorator, and it will wrap the function with the decorator. When it decorates the method, it returns a _PrivateWrap object.

The _PrivateWrap has the public api result and funcs. result returns the original decoratored result and funcs returns the tuple of the original functions.

from private_attribute import PrivateAttrBase, PrivateWrapProxy

class MyClass(PrivateAttrBase):
    __private_attrs__ = ['a', 'b', 'c']
    @PrivateWrapProxy(decorator1())
    @PrivateWrapProxy(decorator2())
    def method1(self):
        ...

    @PrivateWrapProxy(method1.result.conflict_attr_name1, method1) # Use the argument "method1" to save old func
    def method1(self):
        ...

    @PrivateWrapProxy(method1.result.conflict_attr_name2, method1)
    def method1(self):
        ...

    @PrivateWrapProxy(decorator3())
    def method2(self):

Advanced API

define your metaclass based on one metaclass

You can define your metaclass based on one metaclass:

from abc import ABCMeta, abstractmethod
import private_attribute

class PrivateAbcMeta(ABCMeta):
    def __new__(cls, name, bases, attrs, **kwargs):
        temp = private_attribute.prepare(name, bases, attrs, **kwargs)
        typ = super().__new__(cls, temp.name, temp.bases, temp.attrs, **temp.kwds)
        private_attribute.postprocess(typ, temp)
        return typ

private_attribute.register_metaclass(PrivateAbcMeta)

By this way you create a metaclass both can behave as ABC and private attribute:

class MyClass(metaclass=PrivateAbcMeta):
    __private_attrs__ = ()
    __slots__ = ()

    @abstractmethod
    def my_function(self): ...

class MyImplement(MyClass):
    __private_attrs__ = ("_a",)
    def __init__(self, value=1):
        self._a = value

    def my_function(self):
        return self._a

Finally:

>>> a = MyImplement(1)
>>> a.my_function()
1
>>> a._a
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    a._a
AttributeError: private attribute
>>> MyClass()
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    MyClass()
TypeError: Can't instantiate abstract class MyClass without an implementation for abstract method 'my_function'

Notes

  • All of the private attributes class must contain the __private_attrs__ attribute.
  • The __private_attrs__ attribute must be a sequence of strings.
  • You cannot define the name which in __slots__ to __private_attrs__.
  • When you define __slots__ and __private_attrs__ in one class, the attributes in __private_attrs__ can also be defined in the methods, even though they are not in __slots__.
  • All of the object that is the instance of the class "PrivateAttrBase" or its subclass are default to be unable to be pickled.
  • Finally the attributes' names in __private_attrs__ will be change to a tuple with two hash.
  • Finally the _PrivateWrap object will be recoveried to the original object.
  • Don't use a decorator which will return the _PrivateWrap in PrivateWrapProxy which will raise TypeError.
  • One class defined in another class cannot use another class's private attribute.
  • One parent class defined an attribute which not in __private_attrs__ or not a PrivateAttrType instance, the child class shouldn't contain the attribute in its __private_attrs__.
  • CPython may change "tp_getattro", "tp_setattro" and so on when you change the attribute "__getattribute__", "__setattr__" and so on. If you are fear about it, you can use ensure_type to reset those tp slots. For the other metaclasses, you can use ensure_metaclass to reset those tp slots. Also, don't set those methods on these classes in your code.
  • private_attribute.register_metaclass must be called with the metaclass which supports weakref.
  • Don't set __static_attributes__ in private attribute class, or it will be removed.

License

MIT

Requirement

This package require the c++ module "picosha2" to compute the sha256 hash.

Support

Now it doesn't support "PyPy".

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

private_attribute_cpp-2.0.1.tar.gz (32.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

private_attribute_cpp-2.0.1-cp314-cp314t-win_amd64.whl (292.8 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-2.0.1-cp314-cp314t-win32.whl (268.6 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-2.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

private_attribute_cpp-2.0.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

private_attribute_cpp-2.0.1-cp314-cp314t-macosx_11_0_arm64.whl (86.7 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-2.0.1-cp314-cp314-win_amd64.whl (291.4 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-2.0.1-cp314-cp314-win32.whl (267.7 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-2.0.1-cp314-cp314-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

private_attribute_cpp-2.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

private_attribute_cpp-2.0.1-cp314-cp314-macosx_11_0_arm64.whl (85.1 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-2.0.1-cp313-cp313t-win_amd64.whl (96.8 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-2.0.1-cp313-cp313t-win32.whl (71.6 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-2.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

private_attribute_cpp-2.0.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

private_attribute_cpp-2.0.1-cp313-cp313t-macosx_11_0_arm64.whl (86.7 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-2.0.1-cp313-cp313-win_amd64.whl (282.1 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-2.0.1-cp313-cp313-win32.whl (260.3 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-2.0.1-cp313-cp313-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

private_attribute_cpp-2.0.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

private_attribute_cpp-2.0.1-cp313-cp313-macosx_11_0_arm64.whl (85.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-2.0.1-cp312-cp312-win_amd64.whl (282.2 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-2.0.1-cp312-cp312-win32.whl (260.4 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-2.0.1-cp312-cp312-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

private_attribute_cpp-2.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

private_attribute_cpp-2.0.1-cp312-cp312-macosx_11_0_arm64.whl (85.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-2.0.1-cp311-cp311-win_amd64.whl (281.9 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-2.0.1-cp311-cp311-win32.whl (260.1 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-2.0.1-cp311-cp311-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

private_attribute_cpp-2.0.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

private_attribute_cpp-2.0.1-cp311-cp311-macosx_11_0_arm64.whl (84.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-2.0.1-cp310-cp310-win_amd64.whl (281.9 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-2.0.1-cp310-cp310-win32.whl (260.1 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-2.0.1-cp310-cp310-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

private_attribute_cpp-2.0.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

private_attribute_cpp-2.0.1-cp310-cp310-macosx_11_0_arm64.whl (84.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file private_attribute_cpp-2.0.1.tar.gz.

File metadata

  • Download URL: private_attribute_cpp-2.0.1.tar.gz
  • Upload date:
  • Size: 32.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for private_attribute_cpp-2.0.1.tar.gz
Algorithm Hash digest
SHA256 714510e6a161a2c429e43a8017c6ba5ad4d6ad3af5b4b60b0414c41c3d62b9b1
MD5 96ab23409d2df0f4c74fc3fb8dedd10b
BLAKE2b-256 bd9881a4d0475f523db6cf11addc1e91ac9480defc67835796f408665484db45

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp314-cp314t-win_amd64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 38fd4877c993e6f3a2bd281f5e868bba6e1fca2050e3005f164f02c21860fe3b
MD5 4a39fca93df38dec4ea4156bfa39162a
BLAKE2b-256 21c7282e72ad47667f45622f4fb16e68aa183909f5c0a829dcb88be57496c93a

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp314-cp314t-win32.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 50ef5bb8cf945b1c13eb31cd481d5a7902840002d822ecae76c7011138c875d5
MD5 8c83f87b4895993c9840c1180af722b0
BLAKE2b-256 d8450df6a42c7975d3d6c041d9d1cfae3da79eb5e66b94d84e31afa51e9130f1

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3abc6f26f657bb7170579920b83f60a628eff6d02149ae94072a03d8f8f6884c
MD5 b40eb72e9923cc6f9fef83ea0432b74d
BLAKE2b-256 94f47c3ffce27112bdc1e39d017aca14cacdca155f3871f70327c066ef3054c5

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8c0f4b046fa2571504d759c23763234755ea5dae491be4460f176b906c5c4cac
MD5 ea144dd2f967fb1a2f05d982e54416af
BLAKE2b-256 71aeb72a770f049cbca225f5e5e1c4575a7b04d03a73b31c7ed99fb290a3e702

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 983ee312c2ae700fd4f6249a6a61fbf4ff8dc7259749fb3a3160a3a48298d4a1
MD5 fecb846f44f8c698e43e31a0de9fb7d0
BLAKE2b-256 bbbe2675b3708564d97d16a3e310357220bf2be57862e792225fa280b9094ca3

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 dcdac18e265e16f9d1d0f95835fa8fae22f14a6a96fa6eeccf39abfda9ad5aaf
MD5 2d4f9072015b96348202f5090b9abf4d
BLAKE2b-256 851f9636bf3d9815bd0adb2e82281b0bc186f361b6dabd6e668a4bb8d081ed9d

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp314-cp314-win32.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 e1307ff06bd0033450e330ff6b3b342143c63160e0db3a2ece7cf4ff9b288c02
MD5 9b5877ca7446f69eeb747e819d025bca
BLAKE2b-256 507ffdf6b2212415616648b728b8b1aca5397ded0917f8e8f4637cc4026ed755

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 dd2386296bc0c2949a494c2544fac375669419952b2222ddb5f21fb2a953dac9
MD5 d3d2be77d5e25abc7099cfb1eeb4f9a4
BLAKE2b-256 180db8c4f20b0d56d5b2a4896dcf44029a633a7b88e11642be38df4430e1d9f3

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5854a309da6d6985cb014b6e3b5d9bad62b062109f13db61bfcfe41e641e137f
MD5 976b19dfc986f7fb97918e8aaa175ade
BLAKE2b-256 251341d6d358833cde241ca061aa3c49e24db2e6667ef02fe70e5b691fe885a1

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c97a32d660b416541d53e7655785744fc0140b5e000b3381a564000c90e5180d
MD5 17d26dc26b05bf5ce1e872d63e957203
BLAKE2b-256 b705cd2b0fc432daae8ffc89030f8678fae89a0a143cfd407daf7ee0e93b5713

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp313-cp313t-win_amd64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 04ccda886424f70e6061d89f23f73f6d2fa41912c68f2176581ee5bf83e50a6f
MD5 03afddd5c9fac7aa667a08abed964467
BLAKE2b-256 347dc38096815791877dfdbaa4069f80307136f59fe972dac58223cb05dc8adb

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp313-cp313t-win32.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 4f9732ec27ff771bd9b8aa1e86aea81dc49658a0c87d88df0c78370341aa31df
MD5 af08a904439cdae7da93bfe7391b455d
BLAKE2b-256 384ddd4dfc2ae4cdaa31225c152feeb46232d5dbe3d585dd8daa882a7c7a7974

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e53ada9a30adfd2b5fa2ff60a8a66f0a0d211c3af69d6024c0f2ac4b43eb6d04
MD5 40ef56885be77a7692fd0b877382c033
BLAKE2b-256 03e2acf4e554dbb5074cb65a465e3221ce2b18e3862880dc29931b5c14e531ce

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e65529821164ee5a99e9288e6393004062b081d52a42755e1a1cdffb0b8150b5
MD5 31e063927efe87bf43255af0387f9479
BLAKE2b-256 90e9fd51d92f49a1dad7a9f10a653b126b0bd1fcbc177d25a99de4f212ef0aac

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp313-cp313t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ea5adc11bef1f09b4368e3b0de41d15f9ae64d6cecadbde4635771cbbcd7e787
MD5 2b6d26d8a27ac084daa4d496f48f87d2
BLAKE2b-256 a6f96592fd790ff030be44d0bc1fbb27b7869948e7186723ee2739c03db6cb3f

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 ef34a16a015bd26d4e4f7c1d8fc94f8fd095ba377331042b4b1b493f53fb118d
MD5 437cdc70016f4b398b17f1dc4acd137b
BLAKE2b-256 f6c31ac2c3cfe3c6997829f73edd2c8378ff93a9006efced3352a603debd5096

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp313-cp313-win32.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 e27fe244799c133535c5a39be3b4cce97ee625422b9e478a751703ad378dd79e
MD5 bc7d29085c103bd96be2f2af5589ced8
BLAKE2b-256 3d787fba903d71b7127fb46466004213cdd76b72b1037ffdf98a67546b3a2e52

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 70110e83a6cde583a560ec02f5f958f6b163c6ec4423dbe42ff379b14701fc5f
MD5 4ac2fc8bf82e00ed469d7b5aebbb9c89
BLAKE2b-256 e74a4524f13526057b624e0d372a750a4f9b8a20aae58abcd89433ff7d72c280

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8319af78fe90e9210a521cf37f3bfa7d40def7b608fe19f94b25ef9bbf889036
MD5 bf91b54c2bc2c9c5c36f3adc5e649972
BLAKE2b-256 d1f1b9ec2869548544927692d9338b232869b39002228cdbea4e168bce912cea

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d0ed3561da31055249f0e578d94548e16cd0f586dde385710c8ca045847bccda
MD5 8a8d94471fac82a5f4a4af101923497a
BLAKE2b-256 4fb581afb2aca79f372bde4ac5404024eb1a2750aeabdbc9fa452bfa33800dd9

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 8701d144091f2482ca0f8181638325bfc471555f6fc1944b19b3450cd3132a1f
MD5 6a111b1eaf6474168ba20510e26d374f
BLAKE2b-256 2d47f1644efdf2d832fda83122b9a669e3d4f0df9d1db11d14e4c76b98533df9

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp312-cp312-win32.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 0fcd53c5532f7d2365bbcb40615fbd4a26575690838bfc7008fb60d3a9b2c602
MD5 38a7604eed94791bbe462b190aea8f9c
BLAKE2b-256 c6da6776e92230d3d68af553b300ca33e96715a852f67b405913a5ec93ce8fea

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3e3ac34b29b102e2adf84fcd6d539dff06036d13d96d17f73375bba30d82eedc
MD5 0f92fb868c7b14dc7c21374ef0e2a363
BLAKE2b-256 a178020bd317917641999443017f063dc172fec3874137b67aacf20eda48b131

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f7a88e9435abee499eea0f41eaaefe3179768640e004c62a2273e3753030d368
MD5 7857b254fceab89c345bc12059b62eb3
BLAKE2b-256 82e4071360de1b2d54276741cef8b4deb465dede9275ff4f0adfe6aeb2023b5c

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4655a742ef98e18b8eb7aea2bb6d226f326427fdf4b6353b9e14f1aed31d1bfc
MD5 ba4817ff3dcda07fa4d4390ba317c39c
BLAKE2b-256 06e2654468347840eef1295f15e7a671454edaaf0801df4ce6cb57a88269cd5e

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 241d36ae5e13e06fa4466de6a12e09f2b2d662952bb99a112e6acac016bec3df
MD5 72de39b0de6bf16dab95a006e8652159
BLAKE2b-256 dfd27db55987ac8fc6930438c6c66452f8eb2389251f0220a07a2518f5d99237

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp311-cp311-win32.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 6468fff6b6bf49588a1a73e156925a9de9570ed50ceb15a3bbdd7c66295511a8
MD5 f3c5d2e99a2a4b3dbd50b299cff6aaa5
BLAKE2b-256 a40c175a36aa87f3ee634e96c915bc8f41d0c68b407704f78aa2cf04eea22165

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a74401f1122f8230008b90a703664151ff4fd8560a55056a971eeacb320ec7b2
MD5 754ab7694e0d31884b5752935e1a9882
BLAKE2b-256 251ae96afefec9a616dc605f6289efdca82bdaddd6cee1e7d9fb8f63a9cc9451

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6686855d83ba298c5d377e662779d436c23b99d95092eb83f29a30d88a4ce80d
MD5 6df37e55ee34f245d61ef9f598628639
BLAKE2b-256 2af3663f51e50aec86389c89a682c47a7237d8c2025a26ab4755d139850bbc55

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 29e7992a66d7531746892d89bff377793ab08fd11a7aa551800e0e2ae7b2f0c9
MD5 e1789e7141c5acd45dfbd71f3675c852
BLAKE2b-256 1f225e26aa5d4b9404b7c9d39fae4d946323bf875a833d1ddf090324f5c9ad39

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 23369ebaa11c9f23dc22d01451f5ad9b9a13db0f8d10a2eb1ec893c8d2e124cc
MD5 706790364f19c396c3b1cad5b6c921b5
BLAKE2b-256 8a4435273e00429312f1927588e6f078d7f0872fd98708b1482122aa40b0f83f

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp310-cp310-win32.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 d30ac72c1053f151e8025d1046f5e18fc85fab0323fbbc330137dde8e6382225
MD5 cb1ecd50de3d9bdcad371f82bb35fdbe
BLAKE2b-256 8314b656f2345fe105c80cf41c7261d55f8e31650732ca2bf6e0a8794af5adc2

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f52f84af8192b8d090923cdca41ec36e79f3fbb2ac208704ec5adb64ce06e364
MD5 9bd973c8722cf16857d35bea70478b20
BLAKE2b-256 4d8dc71440df517fd02a8d169acace70eeb37a8a354beb025b7db254b587436a

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a0c72fbbdc3cffaccb31d115a451c86a971caf07c0b6703e4d83e5d9bcb07683
MD5 ee4abe70e5a741dad7ad663f6964620a
BLAKE2b-256 089429ab0d5967437d5fe2e0372f77318eb82f0a8ae277f6f93ca620f187b637

See more details on using hashes here.

File details

Details for the file private_attribute_cpp-2.0.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a56b761e23218cc178765921679dcb3faf723aa67abe52df4fe1e29ac206e4af
MD5 01e6ca7574a41d51d645130d09a1ea6c
BLAKE2b-256 9d8c5cd3542c6442bb8c03bfbd4d1114bab3f83a0190f7d2e517263e58e3a343

See more details on using hashes here.

Release history Release notifications | RSS feed

2.1.12

36 files

2.1.11

36 files

2.1.10

36 files

2.1.9

36 files

2.1.8

36 files

2.1.7

36 files

2.1.6

36 files

2.1.5

36 files

2.1.4

36 files

2.1.3

36 files

2.1.2

36 files

2.1.1

36 files

2.1.0

36 files

2.0.6

36 files

2.0.5

36 files

2.0.4

36 files

2.0.3

36 files

2.0.2

36 files

This release

2.0.1 This release

36 files

2.0.0

36 files

1.4.11

36 files

1.4.10

36 files

1.4.9

36 files

1.4.8

36 files

1.4.7

36 files

1.4.6

36 files

1.4.5

36 files

1.4.4

36 files

1.4.3

36 files

1.4.2

36 files

1.4.1

36 files

1.4.0

36 files

1.3.10

36 files

1.3.9

36 files

1.3.8

36 files

1.3.7

36 files

1.3.6

36 files

1.3.5

36 files

1.3.4

36 files

1.3.3

36 files

1.3.2

36 files

1.3.1

36 files

1.3.0

36 files

1.2.10

36 files

1.2.9

36 files

1.2.8

36 files

1.2.7

36 files

1.2.6

36 files

1.2.5

36 files

1.2.4

36 files

1.2.3

36 files

1.2.2

36 files

1.2.1

36 files

1.2.0

36 files

1.1.0

36 files

1.0.12

36 files

1.0.11.1

36 files

1.0.11

36 files

1.0.10

36 files

1.0.9

36 files

1.0.8

36 files

1.0.7.1

36 files

1.0.7

36 files

1.0.6

36 files

1.0.5

36 files

1.0.4

36 files

1.0.3

36 files

1.0.2

36 files

1.0.1

26 files

1.0.0

26 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page