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__.
  • CPython may change "tp_getattro", "tp_setattro" and so on when you change the attribute "__getattribute__", "__setattr__" and so on. If you are fear about it, you can use ensure_type to reset those tp slots. For the other metaclasses, you can use ensure_metaclass to reset those tp slots. Also, don't set those methods on these classes in your code.
  • private_attribute.register_metaclass must be called with the metaclass which support weakref.

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.4.2.tar.gz (30.1 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.4.2-cp314-cp314t-win_amd64.whl (92.5 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.4.2-cp314-cp314t-win32.whl (76.4 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.4.2-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.4.2-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.4.2-cp314-cp314t-macosx_11_0_arm64.whl (88.7 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.4.2-cp314-cp314-win_amd64.whl (90.4 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.4.2-cp314-cp314-win32.whl (74.8 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.4.2-cp314-cp314-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.4.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.3 MB view details)

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

private_attribute_cpp-1.4.2-cp314-cp314-macosx_11_0_arm64.whl (87.0 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.4.2-cp313-cp313t-win_amd64.whl (90.6 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.4.2-cp313-cp313t-win32.whl (74.8 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.4.2-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.4.2-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.4.2-cp313-cp313t-macosx_11_0_arm64.whl (88.6 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.4.2-cp313-cp313-win_amd64.whl (88.6 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.4.2-cp313-cp313-win32.whl (73.2 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.4.2-cp313-cp313-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.4.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.3 MB view details)

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

private_attribute_cpp-1.4.2-cp313-cp313-macosx_11_0_arm64.whl (86.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.4.2-cp312-cp312-win_amd64.whl (88.8 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.4.2-cp312-cp312-win32.whl (73.5 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.4.2-cp312-cp312-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.4.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.3 MB view details)

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

private_attribute_cpp-1.4.2-cp312-cp312-macosx_11_0_arm64.whl (87.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.4.2-cp311-cp311-win_amd64.whl (88.5 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.4.2-cp311-cp311-win32.whl (73.2 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.4.2-cp311-cp311-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.4.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.3 MB view details)

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

private_attribute_cpp-1.4.2-cp311-cp311-macosx_11_0_arm64.whl (87.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.4.2-cp310-cp310-win_amd64.whl (88.6 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.4.2-cp310-cp310-win32.whl (73.2 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.4.2-cp310-cp310-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.4.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.3 MB view details)

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

private_attribute_cpp-1.4.2-cp310-cp310-macosx_11_0_arm64.whl (87.3 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for private_attribute_cpp-1.4.2.tar.gz
Algorithm Hash digest
SHA256 7d1f5ef1099ee626043c1b7277856856260633ec017ff2aee4699e19446091c1
MD5 8dd580587f3f1c23f78e01e561c6ca08
BLAKE2b-256 d252072a04e5529aa8a5d2c5f539bf29b6cc95424431ae0ac06c675011e350bd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 9676347fb413d8365fd3e010a043beddafc303cbe80e3735bcbd74b354c5b45d
MD5 c3955e6e73630740241af8ef39cbe7e5
BLAKE2b-256 18d3990933abb155f4467e254b56f5a46b90493e50768288c6efdb0b88af016d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 49193944971b04846b1de364aa2b77d71f97ad33bcf3b7679ff2748499946643
MD5 7bd72b2ceb928f4959b5cf6f6f302d8f
BLAKE2b-256 b9bb7111e92b502dd8852927b3b8bf10759fd81e01ab9b24951798af6e1e85b7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d30d358275f08aa7079f6136f442e447300a6d8eea16d15a4266e45863424bc3
MD5 154a978dfc5d6738bca4f7d140536095
BLAKE2b-256 b64ac23343d4775e09051ce8af9a39aef4407ac6aa1023cb7b777645f27f869f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2a80a9bf010ba70abd3499b5e0b83823999377e63aea0ee2a06727e1aed1bb53
MD5 ca8033aa471d49adeb30f79006cd2c58
BLAKE2b-256 e349648f528d55b15adf8be10b67ed316f6ddc08195ed7fff79e7979000f7c71

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9399ea904fb57ce3cd4c0ac9b1b58a462aeaf56b782cc0a309e80abc9f926ffc
MD5 12e16fffff8caeb773d9177226aebaa1
BLAKE2b-256 7fe2ec59382cc51176c97d9eec9f37eebeb34733875479fe6d888eb458f0e2be

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 3caa3eb43954e02959fc8bf44d531efd5a1648b4ebbbc933e8fba393d8b90c0f
MD5 d17bfa62242bbdf84f53a6d47387f2c4
BLAKE2b-256 7e7d5f117984ef34e07e34fa0a08050cc529063257a71d0b7f5923756e0aca42

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 2c6cf898e9e3576ce9e754594efc3ccc85a17d815cce10d2f0d4396677b0fe3b
MD5 5ee7451c96f9f903da9abb72436e7e57
BLAKE2b-256 571fadda25876b60ba4aa9a91d23c72a847aa17112633e9d5ed082ec1999fdae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a7f86d78ad7e40f773fcce0b3d93690aa31e332cba25a7b677e57bd1875579a6
MD5 66854fec79fb4ce8f9b26e3a4da20612
BLAKE2b-256 0b1ca5d1d9ffac4eb89ecf5d01aaefe0dedf46bfdb82d6e5e348eceecf4b2e2f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cc47901e85cee6e2133b560b3dee8fc902e9b6ff2efe3c8564dfc9edc5338441
MD5 1a584f0a15f74be9921e83aba09fb0c6
BLAKE2b-256 1d93f6e2d3352e0c90429b6ee675b2477719e86653a2f215f4e503fab816e981

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 81c08b6fee993b19615c7b29f709f93bda72d08a1d74be7657fe8947650d0aec
MD5 ac74c04266554330d10655ddbf32b4e8
BLAKE2b-256 6197f6e319d33a986390423bf95b7e335601bca864a5c2ecbe3191b3f24e5d9c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 26551fcea7afc4eecebaaf56f78c95ea848bd74577de96fe67f7b4c109411136
MD5 511b9a236eace5de59aad0439593eb65
BLAKE2b-256 a59e445b13c66f53283c7183225f16c5ec411c88bf7cfe6835c105be75bf9a55

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 77d78ad15ce2f91929b9d0985879d522ccd32746ee4919054eb5c2255f031ad3
MD5 0ce659c5d51896abfed71f5c4b020f4f
BLAKE2b-256 84586eda466e64725dc0f4e4cc105565f166bbbdd54de461c30f12d7b4173887

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 149861232800f142b564d07ee76827505a4260b81dc7b19041b30436d116bc27
MD5 93da7f16fa8752660a69dcb9aa179f48
BLAKE2b-256 e0312574f25b39f0232f69fe9f80e3dff3a680810c6e53ab47c5811782aafbc2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9338304fb26e1c91e92f61e7d668e766745df60487ef3347faf01445084defdb
MD5 6d5339baa38effad555ae09a46943f48
BLAKE2b-256 ad59284077372a64e2edadaa61c360c6107edd58a80f0c7abdd87d0c35759342

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5efe780e0b91ec0afd76c6baffec47c76ca133b0723834d666c36391ddf62ca6
MD5 24024aac1103babc95b7716551373cb8
BLAKE2b-256 507b454e81faebd98ff69da1bb4dbc7f9fdc1e898091af2b28080dc37dde6146

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 d99ca67e5a463f362e36481696f5aa9b3bb40f75e0d02c22c479aa1ac7ed223c
MD5 9dd5330c38256bb8e8547114d8002ffb
BLAKE2b-256 fb39670f67964cb7081655fffd93c346136c5bfd7f8ff8c451ace1baed3140ca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 da81351900e6e4cc4b4d4878fa463ccae12f9c427f7a5dc47dfcc1102bbf063b
MD5 fb6491c2a853c767d3d1812a48a44c3f
BLAKE2b-256 f1dd3fe6bb6e5201fc621aa38419edfa25ca93d0c9dd4a8e6620720298a30f71

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7fa64b3c3ef9d284406954bd9078e7cfb8fd6ed5add2593d64da81e1757aab57
MD5 e76a93f4a914326731a43c890e7de8fa
BLAKE2b-256 88ee1018bf19aeb7fcc396656df09fd3e17eb00faeec8ab562573a002703a999

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 173d84df11548dff77205ac2c8b5e0215990393b9eaa8d81024fe6ad3ac4c3de
MD5 33b4822ff9e8eebd12eb1239e07f8a58
BLAKE2b-256 64485f8294da6ad5a7a7c5c73efe2351eb1ef5b2dc2e54b7b0cfb06ca5287812

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 07e52cb021acb8866feddd30e14c8799a8613c19b137183121938a1e3e6690d3
MD5 93a9043a242a22fb91f1ca1a973ccc94
BLAKE2b-256 605d8743b46c269ce15b14c442b2d2039ef80a655e89907f527d164b79a12a90

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e97b4377f69f59b767931f73a4a13a54eb760f6a7e33930ed84a80821a025b15
MD5 8258d6df4ec7fab4483a8f36dda36916
BLAKE2b-256 63b4ecd960e3931c2b793098c04ad439d08975bb9627bfc521b2293f24e3cdf9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 9e6614990be1791bd4be3412b5658f9565af7d2a5f18f2041bb6373d15f047a2
MD5 7f2edebb77e696b8a843d2697ec3b148
BLAKE2b-256 c818caf42d622212501bc730346377874a660b6260ff6820f5b667575b977d21

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b63846ad7485d95b659fcbdf0cc00b720a0faaf9a3d5d42f1f9e466f52dd3e06
MD5 8e7c0a7cfb9d63ca0e96d5d8e471e341
BLAKE2b-256 44c5d009b84ac6810bc9cf763a61e0b71620a169af47fe24ed44fe5443702f9b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 90ea7412da845166bdda7eebdc6388871d35db28509f2caea171dbf93a6659a8
MD5 4284af82241c854663f835ba41d805f2
BLAKE2b-256 64a8ec47c2a1b3f688267c4330b3fa9fff89112e38e486ee531ed69fd39e338a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 edebf92535cb162b9c715201ac4114fda6a734714c25a7fe930ed475b655f31e
MD5 24788830c481334d555e31a64bce4bda
BLAKE2b-256 e455aacbf13a183504886ab39d4aa4039650ad931df5d9831d00138f22730b64

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f7b5c6f28aac2ba15b52ba6e0c0d97f9cbd66905e486ca7d759d34d6e0d7dd5f
MD5 a828b496b317804611458c69484b9607
BLAKE2b-256 c9baf5d834d96e9d0d39342a316c9fd1b94d41bba92719e3a16000e8f1955368

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 08be9a97d257440d78ee0f735e5f38844744719ec1137def94f22de2c7123abd
MD5 d30948ff2202f1a2ce1f19fc39fd27c7
BLAKE2b-256 681cf2daa787b4808a621915859749369ab3c138428ed4f3435f93c038850d1b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 199d326c71dd9bdd262075eed23de2d9803ec24d9e634ffde11597953b670087
MD5 f1ea0da2086ec4ce59a020d0e7b0542a
BLAKE2b-256 fda5508f6772d82ed0ce1b181503549de1667ac44195e3dd6a8da2212191f718

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ed53ae418e7061fa0cec24a11cfb681d2f205e3c066fa5a8de496cc06a866fca
MD5 8db60889eab730365e3c4341f4867149
BLAKE2b-256 a55ec38acc1f7ea2e7f182294c55313f26653adaceee07014444ceec74871d92

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 05473a7e3b6ece174e3f04757c81c1944d2677439f1b830f82ca29bbf6471ce4
MD5 3f33497cb31d1471882384463aa042a2
BLAKE2b-256 4358c849115e2fbbbfa83d75f3e8b960687a24c4d941c9b3cc3c7091824b563c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f4b1874f022f72f8fa11647a8a8103fe82e38237bc49f213128bd65bfc2964f5
MD5 f2f53ca5a844ca0030d6fd0b98db54ac
BLAKE2b-256 d056745465282fad59894a6e440827c51c64be7379414a4e194df075832c5c25

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 7126127d65bf64033817d7a6115a8e9b9d2282beb9e249b2fc75a5e4fe8ccc8e
MD5 b2202f798b5399458f6fef7122b8843b
BLAKE2b-256 90618e4342980fe26e2646e846be80b3c835316547f332d4b0021cfb0af23c88

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d8486d55a00d411899057c5f76f8adef9236aa7d3ce39416db4ca9389d11e60d
MD5 ec3d6a61e896b0d3547aec6a09c93453
BLAKE2b-256 0b51e68111ff81b591f7d0a4711e3a797160d808296df7a34a21ce50080b99ee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5715c99251e594bf5a0349f461815616597e6699ec8afc007e5f0d3b6fbf7e7e
MD5 0b69d8991af7b0d080ff2c1f912589dd
BLAKE2b-256 8bd7b1f4849d134b7aa2e3c970d0940fc9a597b052ed472a3496c17e7a814605

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a653e4082153b3689dd9c6c81b6d418ed95874a9278e50fba49843207bcbe9c6
MD5 2a4b062c8816b7076b46501176b47fda
BLAKE2b-256 d323f866bed23eb970693e5219a5179a99b7c15a8ec7f21cb69b54d208344b86

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