Skip to main content

A Python package that provides a way to define private attributes in C++ implementation.

Project description

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):
        ...

    @method1.attr_name
    @PrivateWrapProxy(lambda _: _) # use empty function to wrap
    def method1(self):
        ...

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

    @method2.attr_name
    @PrivateWrapProxy(lambda _: _)
    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. It returns the original decoratored result.

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.base, 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.
  • 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__.

License

MIT

Requirement

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

Support

Now it doesn't support "PyPy".

Project details


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-1.2.1.tar.gz (24.8 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-1.2.1-cp314-cp314t-win_amd64.whl (83.6 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.2.1-cp314-cp314t-win32.whl (67.9 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.2.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-1.2.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-1.2.1-cp314-cp314t-macosx_11_0_arm64.whl (79.1 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.2.1-cp314-cp314-win_amd64.whl (81.7 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.2.1-cp314-cp314-win32.whl (66.5 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.2.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-1.2.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-1.2.1-cp314-cp314-macosx_11_0_arm64.whl (77.7 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.2.1-cp313-cp313t-win_amd64.whl (81.4 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.2.1-cp313-cp313t-win32.whl (66.0 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.2.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-1.2.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-1.2.1-cp313-cp313t-macosx_11_0_arm64.whl (79.1 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.2.1-cp313-cp313-win_amd64.whl (79.6 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.2.1-cp313-cp313-win32.whl (64.6 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.2.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-1.2.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-1.2.1-cp313-cp313-macosx_11_0_arm64.whl (77.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.2.1-cp312-cp312-win_amd64.whl (79.6 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.2.1-cp312-cp312-win32.whl (64.6 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.2.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-1.2.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-1.2.1-cp312-cp312-macosx_11_0_arm64.whl (77.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.2.1-cp311-cp311-win_amd64.whl (79.4 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.2.1-cp311-cp311-win32.whl (64.5 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.2.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-1.2.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-1.2.1-cp311-cp311-macosx_11_0_arm64.whl (77.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.2.1-cp310-cp310-win_amd64.whl (79.4 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.2.1-cp310-cp310-win32.whl (64.5 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.2.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-1.2.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-1.2.1-cp310-cp310-macosx_11_0_arm64.whl (77.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for private_attribute_cpp-1.2.1.tar.gz
Algorithm Hash digest
SHA256 7122fef6580da820b91bf892a2f032b93405f83f0cb466fe77d49d5c65ac1a55
MD5 4c5a90ec084d8ef798b9d6ba2deaa2d8
BLAKE2b-256 2a9027fd21a396e745eda9ca025263d8aad20b21d97be114d7418ce3c500ca14

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 9ce733ef2d403ea7ada91f4a2e7420bf020038d26fca173a00b49910f6810e27
MD5 2beecf4c21a1807af740ad1c2694fb71
BLAKE2b-256 ea76933d4b111d2833758299b8b79b5876d4a40ca5703c1e322708803abd5f99

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 3825415744ed2ab3761e0cf75fc0d58cb78b336c00745ee224d22f46203fa680
MD5 87d8fa75f516ee38075ca7661c0133fa
BLAKE2b-256 e06c7627bc5e72a020a7d3c4e7d5b9d7ecea2e79ae0ec0937bdbbe07347b9447

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b316cc2b2f54031db6d4fcd6fd3761d69d8eb88667d082ec290569b8f852df3c
MD5 91b5006dc9bb12f1868e4f899187fda1
BLAKE2b-256 b9af82deea09bbb3e5c1b7dc4165a43333bae8fcf050355b2a1e0551486df78e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 484542968b52151099eccf7c2196155a8db469e5819329bdd820387b2ea6333f
MD5 c659f20119cc5a941bf59619674832f6
BLAKE2b-256 136bef0369e605b261162e0973f20187c4c075158c409825de403490a78e5cb7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 082b49d51c8ef84516c19f74398b5d8b11c5d5a3b92a1b5281e55388acc268d8
MD5 d4a0105aa8e3f911219d3d0e56ca7616
BLAKE2b-256 15a96b485df4a96f2c7c0c204721478b55a59a8c4f927d00109dcbbb40ff5bd6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 c6dc1be661833c1e3753bc21f3a23a0241b889dacac8743a2cef811cd6798556
MD5 4e7457c6bf9b17a7f4fd55e7fb22e9db
BLAKE2b-256 1042f5fe0af448371f52efdbcf551f639b9ffc517c316d7da1f69d6c036fab31

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 a7252763a006d39c750b624ff8f51ee02089751ad4896a11286bc67d899d58a9
MD5 4174a5bcf0cb54d48df0ae04599281da
BLAKE2b-256 f3b32c42744f431fef12414a8138fcfcf18f20e3a682b16e9c67a1ac81b66a51

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 49e0386ad0a71fcbb5dce3f8bd2e3f3054fd57b088fc97c8feb928308946c5df
MD5 cc61a25beea32acf80414016d05811f8
BLAKE2b-256 96ed40e8cab2364979ac36f91998c2fedb74ca30c9f6788693ef2a50ceae45be

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cdd1c24271c39b9945ab998e39ed450be5eb9da09fe38268bba99c19b4f4ea29
MD5 188882116d6e3a6f601cc1eadb16717f
BLAKE2b-256 f074af34c122b1bb0ffdc3435f72f9b5f1d25e07f7b0150d3073f18afb943f2e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 db4bad06130d41e8a667fb5b62da4eb9d82bfc57ec99ac6717f7d6d33fe25d9a
MD5 7a9f43c5aee59c693d743844ac93f984
BLAKE2b-256 2b50fbc9f849d2a5523427955ee2db13ffe07942c5e6b4214cfcbb390f600d65

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 722ad034c4de10615292a4ae09a53f79f8746d928fb0ae078a1cd7bc2749a056
MD5 a26fa3307deab11c2ea0e7bb8083039a
BLAKE2b-256 4cbb41c99c19852983c859ea2303ff273e4647e8a2151eca2d4f47b76b0cdb9e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 0247cb2e98300b0640615943dc17a67b3f9cffe9b9a1ff214d48f5ab139d6d3b
MD5 8c6d72cc4ec09e232e9549cb174f3199
BLAKE2b-256 38cd97308772ede2926b1fada82c2fc1d59fddd3c93d62c811b0f9db2e698649

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 20749c2a831424dc2b806ef86d1d9a96bff029646ae14e48ec303cba652456a1
MD5 a2cd6f15cc531d5bc8cb931a47e348d4
BLAKE2b-256 481f2d087cbecf6c003187f0902d47f842773f32c40b60be8cef90c2878e28f1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 61162f3bfb9ab34b9c68698c0ea84a425c10b131e7a4ff2e1b243bdf9dfab1e5
MD5 d8a51bead5155beef1c1af91157f9589
BLAKE2b-256 e9e86868003bfe057e060d6039c2883365769b083a00b84fa46d5b024c26609c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dd90a9586557925ea45d7d220f244013f1e8b231a786df51d886089caacb4253
MD5 b13256655bc798f9cf2c9ce922fed70c
BLAKE2b-256 503e118b4b8ff14b81533016c858a85df0796a236dece1a2e5168915486d9423

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c7119d029c861813818e7d1d2604dc8d905bb74fadd044c5795478fefbeaa5db
MD5 1eeea12a35291e04e25d6368082a3125
BLAKE2b-256 51aa84ad52dcb01428ba63597d81313831a0fda018a6c34491affd6a53aa09a2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 6bf49bc90f8d7576cd5d86f722a8b564e6dda78094f531567dba2266def5490a
MD5 ef6def050b4d94b93c1b0740cb9e98d7
BLAKE2b-256 8b1b53207d17344900ea703b8ce974adfcee402117b9bc0e32ce5a80c72fc769

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c9f7fcd8f996ae20b5ef3883fa551062cd005727383b36a2c78dfa8b5a1a8ea5
MD5 cf0f8843e0c6da95ff6325b6d4467d02
BLAKE2b-256 e5c17f84ad5af2a807437a24a9907daa743a5b40b30e4916d31c0f1c8235f285

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4506336dcaa7e37d869dbce65339250bbd20a478a6fdb9bbaa0e15484e6341dc
MD5 80cb91b2a98d71cce4b24440b8660737
BLAKE2b-256 1b4a5f0a15555dd8d469d2c3383b5287259ce52604416a22202cdf578cbbbe1a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 42147bd80676d1a5c448e0eb25ef343ad96aad0f16bdb1d9ace27ec8fbbc050e
MD5 886893265aef141beb8d248a5efeea6c
BLAKE2b-256 33481bd75041ea4b9c85a25aeb0eb6c8ce8be51ff612b515494cd700dd315583

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 15ac1fabcce4531b5e4f9ab86330af69bd864123905a0b59fab7291beca8468a
MD5 ef4253089838d6320bd4acb95d666375
BLAKE2b-256 d0cd53378128b5ace3b4b2d4593e137af7e1fdf56563c6377f5a3294a99960d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 076ac8f442eb871be7ba3eaa8f927ff8e41e78e66bbbe1fd983529ddbf1f4ab9
MD5 f9164053453382ff1028a4c48049418b
BLAKE2b-256 6d73973c5497153c7d921aa3949e63f11394952ed1adbf993dd072c3b14b56b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e4ecd04e0bb824c0cc9c17a4360ae87cac8118e1e8ab241e4ba7d9a7ddf54c79
MD5 b4faf9d7b32db11264d97f85ead5b800
BLAKE2b-256 bb39c102f153eb1576bd32838a13e2160af4f3dffdb0dac5ff70b7fb1f38b4f1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bca4b302be1477989c558f2b4142db6272a46ae20a25515691bec858e043b2e8
MD5 87ba5ecddff388f791bb443a6fd33a84
BLAKE2b-256 71f550f92b7fcb2d531239cb3817ab059454b47b86be97d12dbaed8a254d5267

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bfda31f0c00e5f66c7b4c22bb00947c588f024ec2319ee80ead004dc9dbffb31
MD5 4f5dee5859d473b3639515e018acee4a
BLAKE2b-256 4fefea48817a90aa733ffa7839a2a5229bcbb054a1dce66ee3030ff61a31bbf1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b552b8ca3ead16aec329f1a329b254e522f92e159dbb1868227e84dae568170b
MD5 6567d2284ee3f18ba6ffcb020a465925
BLAKE2b-256 bb8cfc7aa61bf3da23176e0a3adfb29b81d1d221b330021e543d6da7e8ae77b6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 802ec7dbf33ea5e490301d7b9013b671f12a8276f38efc44cc9d7513e56e8240
MD5 f6fbc00522d0c857a644b73958ea6fff
BLAKE2b-256 af9e5201b6ff11a433c21b0828514a60c2406c3e9cf396b4bd560dcaad62447e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2c42196d226afd97f68475a8727c66c00319bf06f56cf82dfc1fb6e28f5a0e33
MD5 f25dd69e8f1c16cf29dcb72c5ab14e03
BLAKE2b-256 77db0055da8736e4542961b65955930797ba3dc0ccb307889bf1e43c4d0d9486

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6e201f4fbd5783da4dac2ed25252bb718c2114d2d8e436865ca182ca910547d7
MD5 7e02914fd77f6d34f8342cfdcc415d73
BLAKE2b-256 40aa773b1da1390f4e767d31be348bdd4345e01909701f73d9d98f127ccba1de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 88cebc6e49c060ef83dfaf5da75bb1dda9aaee7df877c54f7b96a9fbc05e2e17
MD5 eebc660316e5b917464c8314d00da25b
BLAKE2b-256 8930286ed7987f5f5abb49f04d0d99a92e7f0f7d796b0a43795aa4836411df91

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 5a17484f661a2cd192e8e182767052be7ad227a8c36ed05d02964f759e506221
MD5 d1e4aaee3f2be557f668fc4af9c30367
BLAKE2b-256 e410a9868b6872cd7df51573ac94a76702d7f7928ed29c021dadb1b900b46b25

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 20a219329bc87649cd409bb1fdf31886032f9fcada7ca77cd001b82f338f881a
MD5 2eaad39293ddb2ed7f771994c1e2cc6c
BLAKE2b-256 5907bd5e49bac35a8ce1b9c8fc42225bf33f74ed06b2d9b76a0fa5af3586fe4a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 cef1175b3a3a53644b299707b1b21593289fc502920a5e8075e3d5a0dce13b52
MD5 e479ad03399c0f7ec2463726fbee0864
BLAKE2b-256 f48ddc005de1936c8bab63b6a9992808e261ce608e732d9797988b4e0096ead6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bb6cbd8b1fd065ab3e55d64ce8d02c2a2e665f8feef9f985bf73d341a8048cfe
MD5 8845f98ee72f1c6ce94b349e7881888d
BLAKE2b-256 783ee2d70133fb9deaeeedc0fd3b9a3aa3b841602767d84a6ecad68c1f9c7f9e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 425fab851812d959ebd49b10ccc002961eb0a515601b9d3a46f8abaa02aecd83
MD5 e882e329b3c3fe53b0f92fac72070929
BLAKE2b-256 378a820c8ec17691570700c2b1c1166807a48575e3663ae4bdd83104cc2d8377

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page