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.2.tar.gz (32.3 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.2-cp314-cp314t-win_amd64.whl (289.1 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-2.0.2-cp314-cp314t-win32.whl (266.8 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-2.0.2-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.2-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.2-cp314-cp314t-macosx_11_0_arm64.whl (84.5 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-2.0.2-cp314-cp314-win_amd64.whl (287.5 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-2.0.2-cp314-cp314-win32.whl (265.6 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-2.0.2-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.2-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.2-cp314-cp314-macosx_11_0_arm64.whl (83.2 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-2.0.2-cp313-cp313t-win_amd64.whl (93.5 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-2.0.2-cp313-cp313t-win32.whl (69.7 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-2.0.2-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.2-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.2-cp313-cp313t-macosx_11_0_arm64.whl (84.5 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-2.0.2-cp313-cp313-win_amd64.whl (278.6 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-2.0.2-cp313-cp313-win32.whl (258.1 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-2.0.2-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.2-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.2-cp313-cp313-macosx_11_0_arm64.whl (83.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-2.0.2-cp312-cp312-win_amd64.whl (278.6 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-2.0.2-cp312-cp312-win32.whl (258.1 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-2.0.2-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.2-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.2-cp312-cp312-macosx_11_0_arm64.whl (83.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-2.0.2-cp311-cp311-win_amd64.whl (278.3 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-2.0.2-cp311-cp311-win32.whl (257.9 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-2.0.2-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.2-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.2-cp311-cp311-macosx_11_0_arm64.whl (82.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-2.0.2-cp310-cp310-win_amd64.whl (278.3 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-2.0.2-cp310-cp310-win32.whl (257.9 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-2.0.2-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.2-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.2-cp310-cp310-macosx_11_0_arm64.whl (82.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for private_attribute_cpp-2.0.2.tar.gz
Algorithm Hash digest
SHA256 c90a6f8d90d56552f3ae6fd56a096894f48ac1a253fd294b7d6e3df17f0e7afa
MD5 4a2907b9850510f7869b879868af9d2e
BLAKE2b-256 7e24b541fc6d242c2d492d5713bce58bc540bfcf4227f5c9c48e3d8ce6a13965

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 83c84acc894e310fe3d5ef5361b9f23c18ac8053528b61464033c82b5c9d7994
MD5 20ff10eba4f2a96c849a435f1138a697
BLAKE2b-256 cb68979d96a7ff6f2943cb9cf3c55d5ec2d3cf6440872c1d6f2a14817a810a1e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 a040ded684d09d988c30b30696e1d122721ec0df978e5f8b6893714b424fb4fc
MD5 45270ff3db215ea27b81401d17615da7
BLAKE2b-256 7a2ed11278305f310a5bbfa3457f4e5bb320568a3ac64ae6c6753b59b69c8aed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ecaff196b7c217e75310a48faaad466ed885b8c1b0b979d13b2ae36ec9c9cd14
MD5 2da87535d24eee363dc9801f941b9a52
BLAKE2b-256 bff93553c66876a30ce39e52131639ddfe2e28518e04f83ef787a1128fb5bcb4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 432057149773727ec2f58d4dd998b22ef34a2cc3b9d0fec7673565bd71223293
MD5 5b09bcd24150a1570dd47d43e1f6d8a7
BLAKE2b-256 bbca6759238e4cc11d2ab6bca16e9cab0c22fb5b07a7285b504831837c1b0fcc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 23e4bc0e3e2d610a309590c2962cb7516c366fab6ff3bfbc9c243df3663db0e1
MD5 eee57482286495c83c31891a5ae30129
BLAKE2b-256 3be8402df8a49db6012372bdd074becdd06d96af61222b2846417d9dec6a650f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 83f6a9da76a26cf142a6626f2376c9fb25c2369b2c5fe44acab56a37f9e459dc
MD5 f3a545216d050a7da98d5ffefdd17424
BLAKE2b-256 ecc328e327a55eba2e60654bc8f6a6dd266e98b734b41af1412b0261e1f0ab7f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 e6dc89d2e1271ba85184145251af2a57d4f0161e5f17c79168362ea5ac33789a
MD5 117dda534f82fa1fdcc3e467f79f2115
BLAKE2b-256 a37b08071a306e0e13f2bcbbe3a042f24544771dce9f54a3234eaa264c620377

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 da6ab8ded3619eabc3070644ec9e62c7b830bcbcd07791b02ba9c6b6fcedf8c0
MD5 fe8f5196da5adeeef5af606e900307d6
BLAKE2b-256 07e857bad2666b0cc8ab9c5a5956a0e138d60ff7ad17f1bd61055a3f73214354

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 94dff60e6559956a74ff786e82fee0451a1c5f7cec1df9f959882f32814b19cf
MD5 4f425069f4e73ed1fea47376cd83ecd8
BLAKE2b-256 fecedc0a7d5c1d0172fa2feebc71521a5f1a1019cb95e66890350eea5f2e9041

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 065fd021a905e25ee56faf08edb8576a47c61c02e6d36a3dda252b0a41ba047c
MD5 f7aae007929187b17e2af6f3810d50da
BLAKE2b-256 cfda865740318e3a2072f53a1657e60eb09578ead8df30d7b18de46e9ac8e5a3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 2d7692e0f795f8896533134769e541dd464d5512b6ac7a554e3fd77276b948dd
MD5 81d8810e8a4232d83bc9e2541465ab2b
BLAKE2b-256 4244682aa29896d24bce4d4d277deefccd3ca09402813588a159be65dab3aa8a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 7a112c66453f06eaaed525804025397d0f66c8e841c93dc6255c8b731cbd2d08
MD5 ff695d54c87e365046e77403df45e6ed
BLAKE2b-256 73c4767b1c24fef2862e46197783aac95856b7c2528a9c7f0ea943f90d0fc4aa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1d41ff2f268f25ffc9110b61f213b707aa398b66b94f4779c74621dffd7ecad9
MD5 00d7013bc0fe0d1bc1d763eb5a6aa7df
BLAKE2b-256 41dc0f67cc871bba4144843309d354d9effc8b08aabae26e19ce2270d909ed98

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bc4403aa54f57a5cd0a877ef9bf0dc250ea564c12a1a836d0e6a8a6950439201
MD5 1d646dd7dd98310e8ce3d3c21aef4ad0
BLAKE2b-256 7803fb33433f5cd80be04ec31b2bff8c8d08e1d6a4c6371cdd12aa2cc98564b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6cba7dc4f226a5d02f266bae1dd42d80077e584f06ad1e32b67f61483410f835
MD5 19d945178fbb7428161094e0c7a368f2
BLAKE2b-256 83cb94b2e7772e68e9fea87688bbafaf8fa7aede52ba01aa3ba1b57f577d9089

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 03a1dd6818b62bb5f01397f9688fbd834ee1d3692741038854efa7327dba9afd
MD5 ed1adf3046687e45986eadd7b45e47d8
BLAKE2b-256 d24c748c5ece17a15c5a1ab8a147dde7e179b75bde7316325fedb501f77080db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 89b738ea4292b671381d135b94cc2766485eb96c23ea08bf4ed71538b6639b61
MD5 40cc5e26946e9a6c98536abfc7e41c40
BLAKE2b-256 c31acfb029a1fc7cc9e2174538af8fc36dfa83d9af13c3c744bdd21e2fc71ef7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a655f89a2703d38eefb7fbac700dcbca7f813ebdb001167b2d5561236f3f6ff3
MD5 1b70f7cfb8e5ddd5c9da74962c0313be
BLAKE2b-256 278ec5525c47b65fc552eb8c6bb71d174442fd764fd08c484f4b2fc3d7e7520d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9f2156639a7d6c4ff4e7d23bfe8df7362188c6acf067975c16c3215819c28acf
MD5 a5236a2309582f1e4f58579d55ce39f4
BLAKE2b-256 35f1d146f56f7dae00ec03adfc6d06ce689c9b5fd14dd2a3fbd875d95b1b3caf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a670931397b40e07b4a1309d4af67ad5acfb0b4bf8963964bfe9b2450ea31fa4
MD5 36411441d2caadcb8ec74c43f7ac013f
BLAKE2b-256 a66b5e8a89fe3f79b1db642bae35a6655452e57558f62c97b89bbe29ad870caf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 184b3b220bc92f1e36620352dea705c2627146f5fb1056cd7346ee4fcee6e4f2
MD5 31a45cf254ac5266cab6947802804dd1
BLAKE2b-256 bf255c84b47b57a19a848da1d5904ca9d0407e79ee5d748349a94dbb49bd0c5f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 73538c77c0f97d8dfab77c39ef3ca742c3d186ca90b25f8586ea63551f52e61c
MD5 9f15d06ffd4ff4ec2c619486e6a17047
BLAKE2b-256 9d89c00c6ad5f6a2d8d0b0c194106cb63d34bd04baa88519413b5c8c10391b68

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 38fcd3dcf8709118cc273bcb0ef11d27e63508fa7acfb66bf8e60387873d2f84
MD5 9abac37bef02f902840776376fe13899
BLAKE2b-256 a2b4bcc4d76f299f6f50b2074aad50392cd0f95d91f9f72392fa8553f2ace0c9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 10fe38908989eea24658259719cef407c63d87b9d6c46cb61d20bef6a2840a50
MD5 ba6fd9b9ba3b944b4abfabd3fb8dbb9d
BLAKE2b-256 a156fc115cebe1781604ba82953abf48d2b659e383b5fd06ddd5e4c21ec2bd9c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 78f3ffdeaf0faa276dcc54fc948168fe260662876b2420cc55dd313f5086fab4
MD5 1344c8cb448fcd73e9d48cf030ed5973
BLAKE2b-256 3e493235e14c9e8e27aa9688e9abb669d294bad934858498e4c905fd2fb2999b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 5a8d581c7718991e6f82354b110d763de7a2d80bad7f7ec33a01ee947569134e
MD5 2ade5c3d8e19d44050885a40ee422e7f
BLAKE2b-256 397b85f2169b686a960b001e6d07a3e32c8507f3e4af96a3da2b0994faa445ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 afcddfaa22e9245eb1ea75b6bcb3bcbdd2e6f18117e95db5cd06292c9cd385a2
MD5 f5e8275686783801122053e34d4ced51
BLAKE2b-256 692882e0799ba76cf16605a183b513cc08b4bf7f6863fa9f87dcf8332660f2d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 67d9ba825d106c611ac546e1f1e42e195ae4bcd7652cc6dd7f95319a5f42924b
MD5 ae8bb22540d527e48e34308ebe56b898
BLAKE2b-256 66b6df077abfa263978f7a384130a4a4031d6450c9165bf167a6b7a5da93c9ed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 09acc7b5c99276944d7a41f1dfde09333e76bf82131a2c8dd14dbf557c22c03d
MD5 a7a1cc650fd4f3f05a7b296e56e73545
BLAKE2b-256 8f1e0d55d54d339330d188643e16e8edfdc9c3af0e09f716305f082c026f0a13

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4fbc9df53a8d6c42e858d6e6053c987503e4e80a36a745810c3312a31b177c1b
MD5 ad727f505bcbc7d535c665e8f5d29ba2
BLAKE2b-256 75fba34f35bd435b4bdb96c13dd29883601c1026c7832aaf3229d5362a6237f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 52380185eceddc40ebea68cbc0f76b3067b07ea232890c382ffccc264f8576ba
MD5 9e61107935f79062de71aa18f8263fc4
BLAKE2b-256 f6a59d94453895522f3ae456bf94e45b50135bf4d68f773a41a3bdb38e8c2095

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 3de5826c1eb2ff24f2f9c10f5ecaf42be03bde274336d3cd849e7bbe6a2634a9
MD5 e8a5d43478f707b094505345db28d60e
BLAKE2b-256 f5c18f8f7af9e01d79cd43bed9126b3a3deb219b732c63ad3bfb4012af437118

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 19ad83c1e8cf90bc75793cc5f354233d1d4ab8cc34c449d0d7feca992b9dfc3a
MD5 76da2bbac2326794f96444b6ae262611
BLAKE2b-256 a637f09e8523e0bbb87c8fba177013c56f05e5b2ea9b972a4f208486a120f51a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ca15aa8edd2e79e1a39dbd38d81bd5cfc0b151720f682f7894481fb3770617d9
MD5 07cbf7a387087152c9a24367c1f11c78
BLAKE2b-256 d8b61a550953b5fabc3dc73e8dccfd342b243575c599447a155cfee6ef857af1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d72adefe0fe5d48cb4960eb7333664a749686bc4403d2f843914e9d950c0c80f
MD5 da1716e2f442203eb7a9990873bc27bd
BLAKE2b-256 c91fc0ef44d2b0e555b519d7932a964d9406005b73fa0b09d26767d2e1c3f314

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

This release

2.0.2 This release

36 files

2.0.1

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