Skip to main content

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

Reason this release was yanked:

Has crash

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

    @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.
  • 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__.
  • When combine with other metaclass, be ensure that the parent metaclass has no classmethod that can set subclasses' attributes. If it has, it will fail on new metaclass because the new metaclass you defined and registered will be immutable.
  • 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.

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.9.tar.gz (26.2 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.9-cp314-cp314t-win_amd64.whl (86.6 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.2.9-cp314-cp314t-win32.whl (70.5 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.2.9-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.9-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.9-cp314-cp314t-macosx_11_0_arm64.whl (81.5 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.2.9-cp314-cp314-win_amd64.whl (84.5 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.2.9-cp314-cp314-win32.whl (69.0 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.2.9-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.9-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.9-cp314-cp314-macosx_11_0_arm64.whl (80.0 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.2.9-cp313-cp313t-win_amd64.whl (84.5 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.2.9-cp313-cp313t-win32.whl (68.6 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.2.9-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.9-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.9-cp313-cp313t-macosx_11_0_arm64.whl (81.5 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.2.9-cp313-cp313-win_amd64.whl (82.5 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.2.9-cp313-cp313-win32.whl (67.2 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.2.9-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.9-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.9-cp313-cp313-macosx_11_0_arm64.whl (79.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.2.9-cp312-cp312-win_amd64.whl (82.5 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.2.9-cp312-cp312-win32.whl (67.3 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.2.9-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.9-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.9-cp312-cp312-macosx_11_0_arm64.whl (79.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.2.9-cp311-cp311-win_amd64.whl (82.2 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.2.9-cp311-cp311-win32.whl (67.0 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.2.9-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.9-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.9-cp311-cp311-macosx_11_0_arm64.whl (79.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.2.9-cp310-cp310-win_amd64.whl (82.1 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.2.9-cp310-cp310-win32.whl (67.0 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.2.9-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.9-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.9-cp310-cp310-macosx_11_0_arm64.whl (79.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-1.2.9.tar.gz
  • Upload date:
  • Size: 26.2 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.9.tar.gz
Algorithm Hash digest
SHA256 99f380f495449f411d2e2cf7b38b7f1409ded73d44d61c868903d2a1e149246b
MD5 33d98555988bc7dff49268c16e3f0cb9
BLAKE2b-256 9e78a15a00795f2d79a453d4766777729e6354ade62a0b8bec29cfd5006c69f5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 3662914d2b3dff3aad60a4bd3006c041f2c947d8c43882bfff10e00e3163782c
MD5 10c37144827a2a45b38d87dd5848ceb4
BLAKE2b-256 950c5ed6fbe049fbc8a90726bdf6aa7b3ed412f470c572dfba56e563f30eae70

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 a3f1336b518393e01d0591429226cc058b7342a8f920e4ba9ecebf2662f3103a
MD5 5860ddf571d507b4a12721015a775665
BLAKE2b-256 89beb62a36405964a0af9a15c1e6cb7021dab829c8ae6751d93e8150cb0e12d6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 35e74c61c0ac1d4f7140b6d89752d8d07ee5059859a740fe9e47dce98c72a884
MD5 5f337696d884e0bf1ded4d0da47229f3
BLAKE2b-256 c8d6d283815fc59c46aa339f1b9c2011894a7155f3b49c7a2acc52c1bb3ec981

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cb53c9ddf0ba116df5eb4dd6dec0df32e85e91d844ec0f7fc906d94f45e93b31
MD5 f2025823df9440aa873ffd8b6561069a
BLAKE2b-256 7ca020eaa0e07aba08720faaa15ad06f790846477775f5bed1c1338c1de29bdd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a634859c3eb95ec07ffe4449be63bff4814ad5850c8ccc897a1549500a8b195b
MD5 7e9644664e57bd327d73fe7bfa759d4a
BLAKE2b-256 7fac390761074c9f11a117cedfa19914030d7ea78f3ddf29138c24e4dfc504d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 a302dc33ac43d59ae758d1db01ab3d902db37b7eeb714fd43d32fe59df27ff40
MD5 3a47f2bfa77b85bcdfb616af90844350
BLAKE2b-256 b055e1cfdf14a010beb786ddf2b25b30118111fd60d2691bba4d3a0062560fb4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 c1704b7f1c01b829a9ee13a0e7deb59b2c73b3e0b2a4b0a37a065a675c3b726b
MD5 3afb166676f4cea2d72bdb1998de20b5
BLAKE2b-256 bd938527b12070f2c2ccaefd48a7fec4b190565345320cd2e69ebbb24c67066a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c46d44a94788b276c41ce0d22f1095f5ad08a0a12606a9e403165a7623731744
MD5 311883d27d1160be41b50afcba5d5776
BLAKE2b-256 43880c48e99ea5bbd482fc3a928a8f0168493046864568786db696d7d48c028e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5f499a77a3bbe9cf0c613b651e58b8ff80fd82388680f30765134f1b16ccf7b1
MD5 2cd3a7cb64a7cb5a4e935edc967559e0
BLAKE2b-256 ace29b6e625937d61e1dcd2f453b34acf2e52162c01362763722d63ce516e7d7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8c2c33bc758ac5d7ceb5e93bde03abcd2d7d7fdbdc61e511b5ebe658c272a6cb
MD5 f51605ea7cb6040cc02b33c92d909706
BLAKE2b-256 f399af073f614a6c2a929f49acd86ced090b87a2486955719390a977e0d62d7f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 ba3548dbfe6e05238c4c04d16d4a3becbc05d9a76842604b9ff77659462eb39c
MD5 ff12953744fe63d017054c57610810c3
BLAKE2b-256 9b3c8144cc9c4ee5aece130395a7c665f8dc12bc4e5f7442356b12ae29fdeafa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 b532b4026de1845fb3cd16dbbcbadbf8d7d0869a9c95c8c2d94c61fa6a5f3944
MD5 0d21eb189b9cdf64c7ab54a8ae799c21
BLAKE2b-256 8f4ba8275e09716b0c0caec222630321445c74c7550801870a7a5ff4599d43c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 046f8afb0a76f1620516ea1326d5c0ff32af3c5c1c7c6fac7bbd640bc80b5af2
MD5 de381487ac239ddda5cee1d693b01dac
BLAKE2b-256 405a5a28ce34ae8bf229390a13fa380df9cc099924a879ffdcf73846259cf36d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d128c96fc0e80bea495d123033217635d44cc32ba50ae9c27c3e20aa38e2b38b
MD5 3b20e256a3e704dcdaf2f70876ddb828
BLAKE2b-256 5e408754c1caae29e50d06244e231f0a6f36b09c17d7d2063e56faf2d25b5a01

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ac6a33664096abbc1c1e496adab199b049383764fb8229febf2b526e5c2e2eca
MD5 cace3b043440079021df489db3c77617
BLAKE2b-256 bea5f47d32d61e7791e9914944eaa0dd6f97f67d871023ce6ee44e385edb3d03

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 e92668012ef64043e123082613c85701724e70170f11171703841eafedbbbe8a
MD5 1f8bb2f8c2e468f31eb88b237451afb1
BLAKE2b-256 064bfb8d684a672c4c7fe449422fa602176a9542f3930bc2f845d7e2dbbccf1c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 40890411cabcd67a84a2f11dd226c8d667b6b45decb4b5d837cf0a01cbf36a54
MD5 047abd7eb74d7f3c59404dbca9b15b2b
BLAKE2b-256 bcd06efaf8717d4301b2bdcca3d8be5a0f461985628cf9bb3ab256781eab1b02

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 fff007bda8af6f5ae615f86947a756b73e35c154be19b84efcdfe7a7cece5170
MD5 40e65ae398e0ea0a433a38fd6111eb23
BLAKE2b-256 25a4f925f46721c4a9b132128386e00f4c1bbd3355e984ebc4cc4c1f662e4bfb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8e954349ca1c2851537ac8353403c1db2dbc50806f97237c044df1ed526559cc
MD5 c7b2af6cb71cc9bf253e36599ed9536e
BLAKE2b-256 261da3b986b7a89edb5d8671ee1d128e1ccc125c751494c691811832eae03029

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f8f2b34ae562269e3336447d96d6335446967c3b64f2fe85beda2aea346583b4
MD5 e5e42cb73786b3926dc2c4ca9a9af59d
BLAKE2b-256 25d9b6bbb2c58b14cc1682fd1f095a2a209f8d3d82901178ae95e707a7e438dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1fc9692152abf7a0203b8c97841171c472452a11259fba53d663997c848fdefb
MD5 08d6d6baf1c99960379711b1f5f6662c
BLAKE2b-256 ac3a11d51e983942976c8f4b22d9d1d8fe82a9d17478e4df65977d8244d06e8d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 ffd07d4b0fae386c3e1e131f55f5e5d9cd88b399abe70087191be2e65da11ced
MD5 da6d6b3c77bbbf88bfdbfc95553035d3
BLAKE2b-256 0ae6e5d9877ce58c2d43bf1bb5d3f01f1948b95253ef76589b4dfdf95f4519ab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f68261f02d5e50d1556904173396e23ed870ee37d85ce254f19c3d9a530aeebe
MD5 49abbb2ae871c77e88153391f499a412
BLAKE2b-256 6fd319c5e8c120ad314b2b2d913d6fca0f0f694a35a7ade3447519c3572e5696

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 aa2fa67cee1748e77b4b9b8cc2b26d142ecd7b1e7b0619609c8bfbd673affd46
MD5 9a28b9f1d0edf526fd2363064696d415
BLAKE2b-256 f7b613be49fe2e0f53401b773b569a08d152dbcff3604358b73d206e49b9800e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5876406f47fbb142d24d58b6403102f2ab278aaef6c4ff4755128733ddf09d27
MD5 7506126466ecfb23214f3990511d21cc
BLAKE2b-256 3fa23b65ba478d54c23bdc2712f04880c529780faf01f1be66988137f57021be

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 dd1520f389e6927e0ff537e7e8ab24af4776513cbb461b27d1d18e87c15b3944
MD5 41f692d1803fc390ecd2868d6c5db5f4
BLAKE2b-256 1e6ac09b5c22fca8b8340695bb1bea50f104d20173f3dc7edb2449ecf97e0c35

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 68350397f943b9966a44750e7a87cd49d7f957d8665f8cf5ac69304e630fd6fb
MD5 cf8d63c5546ad50c579fe4e4e031e797
BLAKE2b-256 3bddf08006a381d70df2734bc7853ae122d8d93855c97157d7aa8cea7d51cbc1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f0302f4bf78b70dce1d8413d9b837f9b9a7ba72626827cfa81961a944fb11817
MD5 f9a76416c6467aa1f7c4fcf2b2325c40
BLAKE2b-256 c0ac280732771f1d27aae847a3b9df865b71b1df78b279fba6ca35ef3a674369

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1fdfbdab048d01ee4a8ee04f9e9141efa391c965194e3d77999cd542f0300256
MD5 c9080397d528542fbaed0b8739b1f757
BLAKE2b-256 abf7256df2addd5bb9f204ddceb7abe1da26f15da5af66dfadaea0c4d394fbd3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6fb680f7d929f6aaf1bf9ff5519ab054daf6a8d64d2e0269410c20edf6875a34
MD5 728c747da499a1ce60744362593876b0
BLAKE2b-256 342b50a51d2d9df502fada764e21715bb476d8f985c6adf2c8ba6c5c3f603db2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 7b294c44e3ce263fd027bec7101620cd041cf941e538ca2725cd22c734c37339
MD5 64769ce9488580978d36ff2483674550
BLAKE2b-256 2ad4962b85eec7971dd232722ec4d8a438c0e45f8b336e65be599da4086c6d9d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 daafd87f82bad043af9fe17ad812b88d7fec64e9b13c49153e44b392a0970ab5
MD5 1222e1f74f0fafb5c3ceae1d3130c758
BLAKE2b-256 0d4b67b5865e99b9de017a2f6d86bbc32032062e728833bbec4370a4b8c1b16e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 89631145ca4b47b27717a3a01c75cb2ed022bebe2273ef287d84ff270d37ffb4
MD5 ecea3096a88ff7b76da6e49583e19541
BLAKE2b-256 fee8ba220afcffb2ca5ef2dcabe8a0613ad578d640ce1ca4e7b99c0298472e35

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5cddf4a4b3ba1025d14482798e20078a563e4a94c57db8db93e4021ea5e9e002
MD5 75bd3d4ed61a7fe745429eb2705125a6
BLAKE2b-256 070f218d8670ef8c3625ad3880248155280fb61a9f81b95010c63fbef1cbe679

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.9-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 87e358e5284f89eaf09e54a8536b5a595941f5cc731c713b3d97310e6aee251b
MD5 60bece4d573aba2c7a192cc47e726381
BLAKE2b-256 933259ba821a60c817774fb1f530a5f454dedecde47a21f569a63a3f91d1be5d

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