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.3.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.3-cp314-cp314t-win_amd64.whl (86.6 kB view details)

Uploaded CPython 3.14tWindows x86-64

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

Uploaded CPython 3.14tWindows x86

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

Uploaded CPython 3.14tmacOS 11.0+ ARM64

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

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14Windows x86

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

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13tWindows x86-64

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

Uploaded CPython 3.13tWindows x86

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

Uploaded CPython 3.13tmacOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13Windows x86

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

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12Windows x86

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.3.3-cp311-cp311-win32.whl (66.9 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.3.3-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.3-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.3-cp311-cp311-macosx_11_0_arm64.whl (80.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.3.3-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.3-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.3-cp310-cp310-macosx_11_0_arm64.whl (80.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-1.3.3.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.3.tar.gz
Algorithm Hash digest
SHA256 53f7596ee5fdeae12fe0a372488d5a681870c1f514bed29417441509aa127994
MD5 6916ae55638925cea9b43778b0018217
BLAKE2b-256 48fff2fe581339125e1e6e2f0823006019ce18fac616643f86a3d12b1c19b468

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 2613aaeab28510489037157077f7fdffa9c2f11dc53bb6c466aabc0c326b4fc6
MD5 7f3672fc7c961eb7e0a917cc4986b54f
BLAKE2b-256 dba74a148d3f2e5ebe3cb9de78ac2c15bd5fe584d790d334d6595562790e1796

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 d132d23f3222a045cd8306b0c08abe9d18cc867ab6e7ec1b9d90ee2212ec9e0d
MD5 1ca9d5f131cd594e0db0d057513cb3bf
BLAKE2b-256 edb8e8aa5f758e1ade10d8e348f61ac50d34d9547d28b8fbf575bdde6f42a235

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0e43e3117cbfc2e2003857c4ee7fc4ad1efe1df9c83e5ed1da8391c755bbb2db
MD5 6af8f1333de25db85854757b0823f42b
BLAKE2b-256 d79c288065a6eba093197cfd5ffd4e37e66e0a4707d5578e8519f1116509982e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9c30a996ce6e0a3d097a6b50ba4853fdb07462914c28a636929bac8b3097dd26
MD5 8c61eedaf5046067e6c6786f2ad7ea21
BLAKE2b-256 e21538655756bd36c169524cfc63b06a7a20fc73ef5cc6f0ac07179fed7ebeda

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 945c2a5ef6ab2b220f31e720c5f140709dba61261ce6f72bfb47c1f19e44bcbd
MD5 3fa64c18bfdea3fd54d867a9aa85143b
BLAKE2b-256 300583200dc2f3f2ce3206bb65225f75d508ab1e056c4e385ba29d41d4785250

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 a4ea5e6d89f9973ea5457656eb36ea3beac36f8e0d81875256b98ddfc756967f
MD5 e1861300e78f34a4eb382c6f0a22b408
BLAKE2b-256 10152e0697c3a2df9c947b3e8b05eb5f0b951c3aed688a60cc4d869d040684a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 cf49ec53aff810b6561591bdfd87d65c6ce8a557f09798bdf3df0ae439a73e08
MD5 83d20d786788fa2d12aaec0d51463cd7
BLAKE2b-256 7cba85d4edfc224069b200bc2befdcd6d13f79e5b1ab14dbbe969541c82cb0db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7befe4dbaa4f96d7d22dc3eaca676fbf187eb7e1fb83c47087c50c52d466246e
MD5 519acef3e027d034d0fdf96e719fcbf4
BLAKE2b-256 30c35c97034038299b44fb41cc5e129026b8cc9d242d4688500b7ee5ffb84846

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c6bbe510c004720147e49f4850f1d8ff0703a72864500b6ecaedbc230e58f0ed
MD5 08244d9b366f1329bdc495ef270b6121
BLAKE2b-256 8b1701569b6a15164080ce13bb09df1f5f3dc42c1819436d6787565b9d8dd910

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2b34c800fa6e98c161013a6a8b6a27d6f34835e95dcb4e7c5976e25e50409e93
MD5 55b594c9ca53f319aae7faa76c8fe656
BLAKE2b-256 a1193797227630794a6c8705a119f7ac6a21767a48d8117db971f040e1f404db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 deee0ffd05c1a7fdad00a92a4bb57e6874d26a7264c45902f9e7bba5126a3a25
MD5 2beca057ab143b773170340748d992ae
BLAKE2b-256 80691f48fcc9588ccb509d2140222f17d51bf407dd818c83d48521a63392c4cc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 f716b5f4c940dffd961e5a778dd49b81808969d9145a33f1d5c3a841c5c476d1
MD5 ee80199b75e15924e0546815b0c8f01f
BLAKE2b-256 1dbd9508d18449abda913428536d05e1e6b423666371b455207ef3066c8b7a57

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 435f8be9ee870822b3905db2f63fe37a45e1a9548d1d07e632d5287856614b80
MD5 791852a410fcf5207d20b897e1469c2c
BLAKE2b-256 09903ccbf316d463841e939f7b666c54168b3d95ac23d97ee54b88a4a774830c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 eccdb1fab8d2d4b77cbd40905ffe1bdc8ef6b5d3a702a8d1457aa4afa5b85664
MD5 bc6fd6d265acbde890e1ec2846265c70
BLAKE2b-256 4c89be8b0fa7d0f03786f58e09c824f6b720c37d054c55beee8d646bcd065034

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d6c9c79e17ee101fc9d81fd8a701b7657310e06352b1bd88fd1c488e36a21ffb
MD5 b52d7b2f50398da4d9d261ef01d23cb9
BLAKE2b-256 0242748dc5b3f2247677a404ff61ebfe6f52ca8f03ec336d6356d430dc2f278f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 9ae6e90b21bbe76c317b7a65aaae4a5b568990f77b4fdbfe306ea064a35dd7a3
MD5 eaba58e272523639a62902e8346c0c45
BLAKE2b-256 ca29b774060e2f66cda95e3c9fb464e03fd1c74a347e8e0e8d16581ff3478dd9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 5b7ff0a16936f03b38fc7d066140094044b6fbe62545f9d2171c545af7d21c45
MD5 f4db7942a9a339a7f605aee178cd988c
BLAKE2b-256 d54039ad012b5219a73793e5a2f73a80daef3942be532056d89fcf0df246436a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0f6de9c4d906d89b7624f8abbb9ed5ccfee6802f8ed8f651daac5041ff475604
MD5 f10384444f5033e682659bc2aa78a2c8
BLAKE2b-256 9d6ceb418acfec0a3659f2e664bcf9af7a1d9c0841dd07b33c4ceeeb91365377

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 848f125aa5a16760339fb285cd601256bfc37bfcac86439c5383afc08366150a
MD5 9cba97124116db75c6a4d30a4cac60d3
BLAKE2b-256 7ec06762eb2c136d1ba29e6d7fbcb0ff3b3d184252cbdc160f7a7aa063e44a84

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b7f6001c2114559787dc27c941695b14c8683b321dee8c4ea28d1c6d5cb1b10f
MD5 023795697f5fdc3c38b32c15259e85e1
BLAKE2b-256 c76f27d568912eac9eaca60d4ab449f5178705b12ad8e95ef560f1f53c2359b1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 814bcf271141c151f789c9dee18dbcde387fc8a8cb7d28954bc37f4b1d5edece
MD5 5da74b503374673caf9f2850d13573d4
BLAKE2b-256 944da30028e6cb9875c26442015603ebd79c18a88412e9254b5f528d1a3c95da

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 a5fd5390982f15edaf0a912ab6af0e9427a51b10209c21208a6b9f6594f8775f
MD5 437f0f5ba9cb32db1f388b54e99efaf1
BLAKE2b-256 ec0ed2f0d8ff6d867f9d7f29828220c8641d0f5080742a24a4a0c63a1e4f81ce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d33d8f66a449185abe661aede62788062e869d6af15d95d11563f826fc2a1477
MD5 1896b76106168bb2ac0aab3e033b378a
BLAKE2b-256 1aa420ec8a2e5e2493976168a2361292592ee22eef62573a2326be3a1462a3fa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fa97e61f3cd688dcaa75df17975702c627d4187164303b687dc0d31025a94cf1
MD5 8cfaccc59400aca16fa0aeec8a9974fa
BLAKE2b-256 fe08da82ee6fda7f7143842e73c7d6715c11d6b2598862d827fe40b29acea352

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ce9da8e2fb63100e50a70628d54c54bedbcf7d8d482b329a3b7781c83a7c7e96
MD5 e09c2a3559192b3ccdb508f19a295838
BLAKE2b-256 1199f01a73b8c1a2326f0f18087b62f723f5c410ef83446716e3b17b9a37b451

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a9695944c69748aa8aedbbdb1bb2df07b1a868652325de217aaf26671d21d26c
MD5 3801d4fe210e0fd664dccde5ba5a8f22
BLAKE2b-256 833c9c594a29b31ec1acbc9cf76c47292b8683e267b917ba4e7e81d0ee9135a9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 371bb28d20410bb1541e2b2cad302323aef13532e6f29ee24eb88d480a4aaf36
MD5 7e0c6c1c8d4c4e8fe444b65ef909f498
BLAKE2b-256 7d6f5e62f22b2a3906ae309a51a79f98d5fb201a47535624f0be26763b6e3a7e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5bcfb1d7910013eae7509e4dbac0b5033abf134e15397117621b5c7554353c5a
MD5 cb25595539d949884d0d3cade235c24e
BLAKE2b-256 e57d3bf186d277d588e02c3a727f96307adf8deae3ee802fbbe26444385f9a3a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3a715d6c7422f0d5d6e17d9d7d71c075a302fd8a4e4edbb0060c36928295d42d
MD5 ab50a2ae911b25db14f8585c89834875
BLAKE2b-256 1a1ebc579b730fb2f8a911374c09d91451e60daba2e372460d01f162cdeba518

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 24fde104478af5891e94dbf05b1f7f89338eef63d35191c3fb8bf5c3bc4d6f1e
MD5 21eb8e38689b45ebcfe370772ec0eb19
BLAKE2b-256 c0a3050e4ca129f9f3e7f395b17603c13756e29676bfa13c61c7728c8b5b10af

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 01a5a627954657ab34bee01c95ad2de509463b83f5c7bf5af467542f27ae9081
MD5 3b953298f46ba23398994c2db8d3bda8
BLAKE2b-256 86a6dc0ef8efed543ba38bd047be3a1753af9e0fbc2a7b7c44b81d9fb9e1c82f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 ba15d11d57b07bfe899560aa87a80ac3b021d6a612609827a959977f891ad598
MD5 0eb9f30616909baeeb0ec5f3beebeba5
BLAKE2b-256 b310f0d9255e482d2d8cda6554407ac656108d82c4d6341af9b66eff8571f84d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f114650ebc7f37a9bcc4707d06153c616b5b77a69c0f6c616ec1a8fe131d99c1
MD5 b86dd65c3cf26286be4d1d74b8123a97
BLAKE2b-256 359321b26f6d8c21381c85f0cd11875d73ff8ac3240c8efff096a4a5b4d6694f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b11422b78914abe15dd1a81ae12bfe5df8d5784ea4330f75a99a8a0f8efd39da
MD5 f47017eed12f2ffa09942913f520b069
BLAKE2b-256 52a28b396234dca0b2a8337e98d321bc5c48c15d03b8c66171aab466bd7187eb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7f50589028643dae3331803c1c674314c962e260fb839d144b480579833d46f4
MD5 a98096d338a69f78e683d5d5bb6b324c
BLAKE2b-256 722f21d57367bb6cca14f4add9489199cf6aefb73c2cbdb65aeaa3597fa9cdeb

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