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.4.tar.gz (32.4 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.4-cp314-cp314t-win_amd64.whl (287.6 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-2.0.4-cp314-cp314t-win32.whl (266.1 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-2.0.4-cp314-cp314t-musllinux_1_2_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

private_attribute_cpp-2.0.4-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.1 MB view details)

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

private_attribute_cpp-2.0.4-cp314-cp314t-macosx_11_0_arm64.whl (84.2 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-2.0.4-cp314-cp314-win_amd64.whl (286.1 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-2.0.4-cp314-cp314-win32.whl (264.9 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-2.0.4-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.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.1 MB view details)

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

private_attribute_cpp-2.0.4-cp314-cp314-macosx_11_0_arm64.whl (82.5 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-2.0.4-cp313-cp313t-win_amd64.whl (92.0 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-2.0.4-cp313-cp313t-win32.whl (68.9 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-2.0.4-cp313-cp313t-musllinux_1_2_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

private_attribute_cpp-2.0.4-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.1 MB view details)

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

private_attribute_cpp-2.0.4-cp313-cp313t-macosx_11_0_arm64.whl (84.2 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-2.0.4-cp313-cp313-win_amd64.whl (277.1 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-2.0.4-cp313-cp313-win32.whl (257.4 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-2.0.4-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.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.1 MB view details)

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

private_attribute_cpp-2.0.4-cp313-cp313-macosx_11_0_arm64.whl (82.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-2.0.4-cp312-cp312-win_amd64.whl (277.2 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-2.0.4-cp312-cp312-win32.whl (257.4 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-2.0.4-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.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.1 MB view details)

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

private_attribute_cpp-2.0.4-cp312-cp312-macosx_11_0_arm64.whl (82.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-2.0.4-cp311-cp311-win_amd64.whl (277.2 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-2.0.4-cp311-cp311-win32.whl (257.2 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-2.0.4-cp311-cp311-musllinux_1_2_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

private_attribute_cpp-2.0.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.1 MB view details)

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

private_attribute_cpp-2.0.4-cp311-cp311-macosx_11_0_arm64.whl (82.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-2.0.4-cp310-cp310-win_amd64.whl (277.2 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-2.0.4-cp310-cp310-win32.whl (257.2 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-2.0.4-cp310-cp310-musllinux_1_2_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

private_attribute_cpp-2.0.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.1 MB view details)

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

private_attribute_cpp-2.0.4-cp310-cp310-macosx_11_0_arm64.whl (82.3 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-2.0.4.tar.gz
  • Upload date:
  • Size: 32.4 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.4.tar.gz
Algorithm Hash digest
SHA256 41b1a2686e8dfa25cfaf20d7fe2abc48ae862825b4bfedb0472de4527a27eec9
MD5 513ad7b6cd7c590294eedffb846c4dd9
BLAKE2b-256 8198e5d339ba52bd3c5288f14553b21cf332432f790194ad7fef66729c9144d5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 6243ed50b1a37591849dec9bf6c148f8a07ef1828c4f7e2e59f8fb48365a25c7
MD5 4dec07c8b85f1f5ad294ffd86709ae0b
BLAKE2b-256 fa1d55e549e96967ffaa547dc7f413e0e2ba7ba5dbcbdbabc022acef7aa0f8f0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 eb099fe30a0593f2b336e8e6c0782bc47d9a469d4b62ec0cb488cf2bc451fd99
MD5 175532053434431dc7333f37ded9dc5b
BLAKE2b-256 04f977f0edf7b19a2cd2bc963bf21a8ca85a2b8bbf7431cf6843add3ce471e18

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 435421a625bfac0983a87e5d79917a0f181a0b7d778b6406e8501a0317ab7201
MD5 c8675d7218b83c07eedbd4e4d325affd
BLAKE2b-256 c6b7b95cb3ec7f2a9c998fe75902dcf17cd03ab1f8b29c4c0ebe36b0479d2243

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6606812b4b86bf63d5b3425010a78559061f4effbae6457225f58ec3de3ce6c4
MD5 34d12422d3f6890cc0e12a49c9fe6086
BLAKE2b-256 fe5cb050097fe42bb9417b5a21b776cc10d704db9eaaa548ef33b987655a5b8c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1cf078b4b62339373b08b340f5e1d01b5f0ad00ff8da4cfdaffe9092808eeba9
MD5 6f9c08dcf29545ea2ec9175ecab445fc
BLAKE2b-256 a784e7ab66bc36aa6139d7ed281fd4fd98d66d7d65ac21eeb3ebcad1bdd0a97c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 0e036b25d3e04c3b9304fa491afdff4be98486526b64969ac544fb4ff56ca5d4
MD5 d1905d291e93d2cd78eeede416600660
BLAKE2b-256 34620c53138e8f6ae65369c2e3778197976c224cdd868a12587a9c08d4e185a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 8a14656c73cc7ad3dd23b371e051f3c939a403714bb736a71acfea0f6d53ac32
MD5 7afe31f20a604e81cf7ceda41d688286
BLAKE2b-256 a9df69a3d3bace5ffc2508c54a843edc30dbd774305a478f2e5337514feb1857

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c3428e0fe7c747d9b1776b711889b6d27102156dab608b65cefd1873c4c3a7e8
MD5 5ad58de75d4552ca2b31767a9fa6819f
BLAKE2b-256 67dcefe8a2d17e1c795f7bbc49929390500ea590e500d09bf9f1a0e91cd108c6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9856953f9b506a6f2c7ddd5b5c2434e43e1257213c5c402a4eef36ba4429b087
MD5 947357520fb2443e1b16ad6ba5b780bc
BLAKE2b-256 c913a7b1f709fa1984b18f6bd0e7a16cb029d59884b3b046f509f8e6e3b3ffa3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7d1c3859129d0c4c5143c0f75f541b42c7056c4643d7ea5de5be4f3a091e3ddc
MD5 8c8fceb88cf4e36fd61f233ca72db737
BLAKE2b-256 cc23f1713eb3a917456aad528ea31caa2ab6648e19041bf6891265d11e9f5b02

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 a0c38aba349c023c78a2e217a6eb31491e0dc9d3da4710c47a04a2fab154690e
MD5 24d02aede541337236d51e452ecf9939
BLAKE2b-256 d145a13a4ae2994a9c7f16b72cbff745486900b10b0a1ce10f04224ebd5a6003

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 b3caefd549670bab789e82d9d1f6fb22d251ced33dcb07632732656a90d61aa9
MD5 08f9d06ebd1e3375fb22c9a0637aceeb
BLAKE2b-256 571a3354d8835f04c9330f8a29e9c87de034816888096f920b97bc222108e427

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 369ddee21e461bcaaea0eba8e86fe1d4f8036b99f7bd4106396f10e824b7d674
MD5 48935377a41d2d057738eab8f7571beb
BLAKE2b-256 7d150fdbc772ad3472615f8051783fed9f89a6f608a42fee787db69c3a5338a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3f9795fa8ea6556a5aa83016f80092259985ee39160bbe6d6253c2241073dbf2
MD5 395eabf84e6dfdd8ed3e828cd0b2f9c1
BLAKE2b-256 e08319719f3cf52fc0dc57a03963d3d571dd47cc99f5b240592f623af208302a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d3eb1f1a416e4b9c93c45139ae93fab6b4433a5502db7d2d952f0f1892c968fe
MD5 01a1ad7bad8c292ae2f5fb2905ac0779
BLAKE2b-256 d936c68e87fcdcde13560742c55002aaa6bb2832de286233f5965b404fc508e0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 3f57ef7b843ba9dcfe19774fc2add8d676496c87dacd46321e6a9af1db4b470f
MD5 b1757997d60d195ec6c77059c8337c85
BLAKE2b-256 7a9b3c0a4a125d20f2a96dc2dfa28c24d550b7e23396d7509ea3f7417c58a62a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 7ab439713c60c72e34634cb3f7410b8483bfc174fc53f14854adb48a9e004fd8
MD5 13ef11e87720b37b9a6f3c369db6be2b
BLAKE2b-256 fcf9d6efa2e25a11f6a2945da33a236958f40864d2a567d3c1ccc64eb6bee83a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b7620218c4f041400d57eaaf12dfd736e2c3694cb5595e6d5a31bfb39da25e9c
MD5 c571e8faea34bc3d562b9ca1c1055f52
BLAKE2b-256 16257566d55ddf394a7257d9de1e2ddfe5fced78131ff5222c4abdc0da96bee5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5c774e351b26ebbae2f003ae5df764c391c5becb82ea9ab298b3f03014035446
MD5 329225870f859d1f4750c53003bc10d5
BLAKE2b-256 19cdb3025d21c0fd3613dcec5c069ab862ede165c07c15a21ac10ae660f77467

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6d0d2bb2726a4a9c92f9d3152b6817a034018f4374693342046bc4fd9f7d8fc1
MD5 eb652319aad3bc586e0c6b9852478ece
BLAKE2b-256 827a37835dd1492095619abea6185075c1a2c972351a60403f8bb888633a942d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 2564fcb4adb2c12e580511e8bad8b986b31b2083d456362e170bbd4311478588
MD5 8ba0c998836387cd3736493246d5f2d9
BLAKE2b-256 ab2bbc9d6c12b4a49fa1f8f9b8015a65081377512c8e7738ce56ed7b92fb0481

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 c8d106e86456b54d9ad47801d106d06063f85a6b637870ec13ad01cfed867714
MD5 10f2cfb74819fa0f6759eeb590da217c
BLAKE2b-256 5b04816fe3662aca004a8ee5a3e06367c5d8ba1f41c6dab93ba2d79b0acfa453

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 434ff50aa6cac2d9d7a5fd4aae7ed7552f9d9a35397eba7e2ec427ceabf4f772
MD5 fec8db1cd9cb6d903a31eaf045b340d1
BLAKE2b-256 409a5a1c783c7797ebd559e5909bc1bd02678d55236bdbf19c17e18e1f24ef60

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 92ce0e7ce902e2446a813ad1531b0b0bb6ba270e874d76cbf4a1e023bae60085
MD5 238423895d733acc80ac8b6e57a0d795
BLAKE2b-256 8be8a3f37d59ce7fa17f1cca77cdb72d87b62c5c4d9d3d9321e3b778312855e5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d9b45eeaceb8a0fd8d0bf6f732e167f74a950c8b9798446f5a27767e4dad2770
MD5 80e33bdf5201e2d1a54963e9512b597c
BLAKE2b-256 bf894c37d1147a70da7a8138f08dcbc1309f071d15c98a4c3f38f518868ebcf9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1a9fdaaea07426820101b0faf5fec9d966fd20615a9303f8fe2381ebd1a9454b
MD5 24ca58746f6a2b2150f4a2808ef8029c
BLAKE2b-256 83132671cde5d3bec0246a7250a99c2ec40ab24e12f40d4a1ae0d1aadfa156d0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 62c65efe8b03a48970a0f736ee5bee910669351d869aa000e5469fe2854171ad
MD5 93e41a374241d1e7bbd63d4d8b913ff1
BLAKE2b-256 2ac1888849f162b28160460066fd2dd84d3ec890cee22e60d6d69c3f3640e180

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3fbfe791ad0dae443b189b1d161cc0924ed0530f8bd50db4b75e61839d6ea84d
MD5 98d7a8ee6ccca16cbccb71fb4ea07528
BLAKE2b-256 3ad2e6d2534ebc9f406b4690e3989668003d75503d1d47d3acffbd86136aec54

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6a0df081ef5208585067340ef11e08f4d78d0c80bf0f51f0379c8b1cb6044e4a
MD5 59a49f00e352a0112e9cbcb98ab4f8e1
BLAKE2b-256 e2002012e90b75960769358adeca422e19bd4db0160d453de0b69d31ba34a1c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 89ce5df93d0a425b730a7d1fcecca0d52551cf8c89a1cbe0af802ede879dfc45
MD5 559285be5a9dd1a13dcb46ebf63b3ba5
BLAKE2b-256 2a57257fa6023a55e61f6b3fc6157475af3aac17c457029ad3a8f9285ec2db97

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 3c9258f91766ccd1ccb1cda849f1f0def4b71175e04b287e04c57cc94657767a
MD5 706d50067da663e001dc49b51de3a2eb
BLAKE2b-256 72fee892371e30e13ec225a559a434bc668b7fb727af38dcb0e87f294651272e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 9ba9fbb1b8905f971f779f36b5f2b38c5db198f3755f2f1012988cee2a5e8b07
MD5 2d005b12b373aa12fb8b3d47f26b416c
BLAKE2b-256 43390bb04d92589a7cd23a4b9d99a7f84155ca643ee18c9f278e40e024bbcf81

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ff06939e1906f23d26fad053c257bec200cbea031d2553d1cdb8d9d2e0b99d91
MD5 87fb31ad3cf9cf3e7d40c35bccbd8f69
BLAKE2b-256 7632967cb561d60bd70a03923b26f25e2e13eb337a3635398bcbd88b89e360a1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 89674e87344765431243e8871dad0d18a787df08bbdf7e37a0fbdc9ee2a7751b
MD5 f348b107a5716f8d2ea552a7f12722ad
BLAKE2b-256 d59a4d27f3b5653056923f33a8ec59dc73ab8dd524162a0badf6b99e06f80b39

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ec466b5b6aff2fc675f1234f9b82ed5b00afde50fa05d17b9b1946c8a3e57076
MD5 e693fbdd96f38459f74af4a1e68a288e
BLAKE2b-256 2560ff914c1ffb09c03311a8befcd079c9a683ace3b1ae972f1594602d973713

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

This release

2.0.4 This release

36 files

2.0.3

36 files

2.0.2

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