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

    @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.3.1.tar.gz (26.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-1.3.1-cp314-cp314t-win_amd64.whl (86.6 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.3.1-cp314-cp314t-win32.whl (70.4 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.3.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.3.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.3.1-cp314-cp314t-macosx_11_0_arm64.whl (81.9 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

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

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.3.1-cp314-cp314-win32.whl (68.9 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.3.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.3.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.3.1-cp314-cp314-macosx_11_0_arm64.whl (80.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.3.1-cp313-cp313t-win32.whl (68.5 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.3.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.3.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.3.1-cp313-cp313t-macosx_11_0_arm64.whl (81.9 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.3.1-cp313-cp313-win_amd64.whl (82.4 kB view details)

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.3.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.3.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.3.1-cp313-cp313-macosx_11_0_arm64.whl (80.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.3.1-cp312-cp312-win32.whl (67.2 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.3.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.3.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.3.1-cp312-cp312-macosx_11_0_arm64.whl (80.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.3.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.3.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.3.1-cp311-cp311-macosx_11_0_arm64.whl (80.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.3.1-cp310-cp310-win32.whl (66.9 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.3.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.3.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.3.1-cp310-cp310-macosx_11_0_arm64.whl (80.1 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-1.3.1.tar.gz
  • Upload date:
  • Size: 26.3 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.3.1.tar.gz
Algorithm Hash digest
SHA256 c342cddbb1cddec0923c9cf3f2bbb09da0ef8370c333a37de5962ce05d1aac4d
MD5 377de1c1e75deb19c6823bc295974c13
BLAKE2b-256 19da8882f8151b7ca40dbe5dc81ebd03887741254a0c40268817a569810fc8db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 cde51b3879daa1792646b13d019fe9e9978dcd51835a54da70bd57cb8f597c97
MD5 c66f196d5554d9a046de83991aa8ef48
BLAKE2b-256 2b02f6708744767dcdf403b60b4d6819755a2cd62e6e35e3d2255a6919af0971

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 29092b4746adbd45e9be12fb06b06c88e24e94da13eb56d7bd943281036067be
MD5 c170019dc0323c3170ded1fea001877c
BLAKE2b-256 4b8e10aa9186eb2c82709dcd1b4830453ddecda87f45dd11821413f83a578b70

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 49aa0198ed3dea93a4df71bb8bad43eb5a9a6d176e5aad8f3fe451ccbab1dea0
MD5 1a1c8b0622fbc5955d42ac5cefb9e4c4
BLAKE2b-256 8cd3f4701b7299307a646b1f4088508d3b73ef48b69fec1ddd4fba9ddff2c88a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 46e0a8c89a5e97fad68420784e23f9331386cd359909d63e88db511220d90f8f
MD5 b1de042805756c1800f62cd027ae3755
BLAKE2b-256 a77111a4e3f793c8b5ccbc19a9d06a85c5408da0e611ddc9bac7c773c4b0e3ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 921142edce412c76a0d5119ca430cca46799f072b4e4c911ffbf9f6ed3c87771
MD5 b42b1c4e08536ddce408a1495f3ecec9
BLAKE2b-256 632f8025fa3fc713748ff6c3625205942db45fc39267e47ccf40e1b32829eeaa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 79046a4d82a7674d50ea3c9dcd775e26cfbf7a89b3f04b4d3cf12e5a892a4060
MD5 42d540901639a5a87a0e7aeaedcead11
BLAKE2b-256 f4f40a62b52b67022ac83d7e41884b832fb03e4ad9c8ddd18d60c52e905b99ad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 cfecadbaed197df7e289e317232d49665caa7bb15f46ed76013c79615e0983c5
MD5 2e75093eb37801de22751401b6e1aa7f
BLAKE2b-256 5f29b40070202f90778cbd355fcc66169e21ca82249666bb5a9dd2d17304a5f6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8642bb85243f5ae3042973004bf3296abbd9d88a0dbef76e7d39968cd67a42d7
MD5 272f1cf82f09bce417033ad09e9faec6
BLAKE2b-256 3c10839e892d22c409b30f82232a080bba2cfdbdb8c45bd218844dc531fd0a68

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 02b93b08ebbdc6a17fb80ed90deb36ed012c8dac721f761739e692c60363fcaf
MD5 b2034a82f756823122ea4577e4358ceb
BLAKE2b-256 b75236c7ba5b3f52d1403ea96a0513de8850a9345dace0c02318125c4e36e071

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 14aca5260b2d84cbcb0cfaaaff0746d73d74d9022249e73479dee67796880a13
MD5 7ed8ad4948724e3e592605d4d9ab015b
BLAKE2b-256 73978021645dc25566796b8a1817eba74efa0fa369ea255dd52f24d26031e1a9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 2cd8fe787eb65d1a6400ad38abd248c78d5ebd3af55555aec723adaf0162be2f
MD5 4107a0e4b8c56a2c0daaf4026748f493
BLAKE2b-256 a7328a208cc2f3d2c7b3b94724242d9a87f9ca604c2302ed9be2d0ff2615b012

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 6a0a5123e12b8c51a4e35aac7352fb27404d97cb8245c17772a7b1e5520eecf7
MD5 729aa032f42389dd4fa13a0ee986903e
BLAKE2b-256 82f076d3f8ff8a17e27c33fe766782040522f7f3139f21112f5312a5df1e66c7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7738189ec87c1979484f2e177fcfa8123ee5f1641cb6c977a57998995700a443
MD5 7170a8aa23dcebb29fe73179a1c31406
BLAKE2b-256 30dc704b2ec3ee3b6468298499153168ff3e113c3379e1d7b39ac9a92837b427

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 735317bd16c1d6705bd9a613ede714a4be52374dd3fa51a6975164c141699824
MD5 89b2089194ee212dffb6410b43b9eaf4
BLAKE2b-256 12c38fe8e10a0505ab35ddf6d2114d1faa37dfba475982fe445340c81e6b7034

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e1f2c7e61e624492937400062612f406224fe1ed3a2ab0e68ab5697ce0b9e638
MD5 3619e7c44beb87f45012d48cfe262d7e
BLAKE2b-256 6b277149b8ea76e01480a62d784b50410cbb9695cbabc2af1447c74ef976d406

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 09480b623444bb769f6ae1aea067c8e55ebd0068c43271b5e2ff92da67df8097
MD5 067d8567eb02fcd889acf834b47e5bd0
BLAKE2b-256 669669acedaa9f54f2959c8019dbfebdffd479942933dcb26299ccfba375575e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 70c2fd15d7dabe9938808ec18ac23bb8ab61de4e36579576da2b2940f7ed5590
MD5 ef445592f1251460689ac2a854077f39
BLAKE2b-256 c768dfa72927aec55c100c058ccdfd019df1fed22bd570152b186d1fa6cbaf7d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e743541a7cfe5ea88c63b9bd0259cde91c713d73f67055093a9da4779a3f1990
MD5 1d279e54cc2a167504a7074608e097f0
BLAKE2b-256 0ba9809ce059a1036a0406f02825b2e45659c75ac56610cf90099ac342bb6ccb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1389211e299740568a8a668f6c318256135d0277e61c17ee5d755912cb81f757
MD5 9eb02984425e4b5738c5d31c3511d951
BLAKE2b-256 356682d9bf8cc137d6a7280b7bceb01d8139b7b35ca7bd7c076fdac0bb69a69f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 443d19ac63c33660a2241697b6fc1427bb3835a394941fbe412ea50f7692b849
MD5 aab0533b0843ef177c452d68f933ba75
BLAKE2b-256 a20f5b7c9b581797c85c3cd3f0f3e875025645f463da960db0c6729b1f3194da

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d0b675fe75d51b4355e49e1c74beb3f5cc0267acbfabeac875da1809103a714b
MD5 2c7e8d5d00dc72961b1354083af97b93
BLAKE2b-256 515e3e15e59affacef9a6e6617f4dd07282a75ad9adc65b10567a36a5dc7b523

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 d98e23ffae990a128942fd40ad0c2fe79424f8e6140373159c93f48d50daf5d3
MD5 541b2d36853db30b523828b8c924d48b
BLAKE2b-256 08da9587a597c6a6ebf91bfa8f485640152131f06d02b526a92b4fb040f6149b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9cf5cb9c18ebf6064428cf8625c6b89f6e440ed621d509b00bfbeee2a9a9063f
MD5 a3444f16de43dcdd3a75c5cbceaeffd7
BLAKE2b-256 57f5df78d59f27d33ca49b16efcac807d969a8231241e16679ae54eee6d5181b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bc464ba81dfcd0ad2531402331366daafc1cc662ddc1dfde2015aef6dec4783e
MD5 73a044ad051d2e485e379bdedd58ada8
BLAKE2b-256 4fe074c4ffff90d38a3cf9820bf28811a66e2e7f61ae7d09a0e8a7142ed673ae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b55770270b078456c6fa05028d9dbde18a42ddfa653b8dca74ec81167bdcb2a0
MD5 7c76fbdb7130903bf966ab288c13d321
BLAKE2b-256 e21374b5d377c2e4844be01e52dc5da66f21854106108c3569a0465641142c90

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 347ecd2e15567eeab914e5b6be1239449a0cd4834f21f51cb5b33ebb7b513057
MD5 f920ec5e8b0ec61a07a13a7bf9c72750
BLAKE2b-256 64a2e5b9a46ae4fd69489557389a3c6715112acdfcaaea179449aa0a5be4bdba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 31d1a963c90d70c61bad7ca3f8e7b73418e21f12e7fa88c0f1edfaef9f20beab
MD5 121104ed6f7ba2656fa55d4fded5f29d
BLAKE2b-256 891556da12b930a12dfdce1acfb288a3ff7f5e11694c8392367ca9e0cc944486

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3aad31392ada2ffd0c296581aeb7abd4539f412289c608eedac2f7dbd32d3cf4
MD5 221f7ed4dd384db3a0f3f7655084dc8c
BLAKE2b-256 77f8e14a03b3aac924bf9dc84f739b6515e4cdc8504b9d7d97b5de57de63f57c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f3780687b77aa4aab1e2408a68fb96a5205f23dcf4805299d59cf5d4dd803310
MD5 8e794867e877a854c7e2cabe95c1b84e
BLAKE2b-256 feca85b07bcb69f02c691cc862b8d3a886e34850a8e2030123d4e2bd19f2480f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 66b822d9fe8abde8f8d97e036909f6ff57f17cf737ebc43d430fc2bf90067fad
MD5 a64bbfc4ea4d3cd545754dde66964a25
BLAKE2b-256 88742713ae310991a9cbfdc59e8718d24a2800b67a30fa6462060fff3e0a5717

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 71d2ac819be180a78a081ef07ecdfbcb413e901cef4dc6fa7b3cc04a9ce0c2ad
MD5 74bd31747f7418e782a4926c9ea28195
BLAKE2b-256 66e7d740e26b3c666af7aaccc6658569a5f1e566233f077aeb17685395efe6c2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 c608497f1d4900088ca19d13b92988b2fe29ea48fff75c9ad688003909967e3f
MD5 f7225939eb8ef5731ef7b11d43c97654
BLAKE2b-256 8e22e0e20fb31790d82cce3435684535b408cffff23d0c49afb7c2914ad5582f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d18e37ff4ceb68ed7097645403245cda4ae164e03f938fa12994fcf6b2d452bd
MD5 3c86f461547c6b1c71572b89d921ade6
BLAKE2b-256 efb88f03ade9d6a096e298a52f9c1f16841f2e71edf30e447d0091aa2ebf108f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4717bf9ee18e9cddffd7e122e432c5dc78a73c6aef8948289a77dd5fc444c21c
MD5 3f94e505c47c57e5c392d80a7f866e53
BLAKE2b-256 e64ed60f27e933534c1efbbf4111ec675da6e5e52904011c5bcdc6049ce68d76

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 47ed9ba37ddda851e73c0bd13d56f1daa7f0c62cb55a197766b79a6a9d8d050d
MD5 aad35a3f671d181e60dddb28bd1c7ba3
BLAKE2b-256 19572fa1d5ec28d7a06aa6899e0e3239a13122f74cf5496b276d8b3e4629d2ba

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