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

    @expensive_api_call.non_conflict_attr_name1                    # 6 Easy access to internal names
    @expensive_api_call.non_conflict_attr_name2                    # 6 Easy use when the name has no conflict
    @PrivateWrapProxy(lambda f: f)                                 # 5 dummy wrapper just to restore order
    def expensive_api_call(self, x):                               # Second definition (will be wrapped)
        return heavy_computation(self.a, self.b, self.c, x)

    # Fix decorator order + resolve name conflicts
    @PrivateWrapProxy(expensive_api_call.result.conflicted_name2, expensive_api_call)    # 7 Chain .result to push decorators down
    @PrivateWrapProxy(expensive_api_call.result.conflicted_name1, expensive_api_call)    # 7 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.xxx Normal api name proxy Based on its api
7 method.result.xxx chain + dummy wrap Fix decorator order and name conflicts When needed

Usage

This is a simple usage about the module:

from private_attribute import PrivateAttrBase

class MyClass(PrivateAttrBase):
    __private_attrs__ = ['a', 'b', 'c']
    def __init__(self):
        self.a = 1
        self.b = 2
        self.c = 3

    def public_way(self):
        print(self.a, self.b, self.c)

obj = MyClass()
obj.public_way()  # (1, 2, 3)

print(hasattr(obj, 'a'))  # False
print(hasattr(obj, 'b'))  # False
print(hasattr(obj, 'c'))  # False

All of the attributes in __private_attrs__ will be hidden from the outside world, and stored by another name.

You can use your function to generate the name. It needs the id of the obj and the name of the attribute:

def my_generate_func(obj_id, attr_name):
    return some_string

class MyClass(PrivateAttrBase, private_func=my_generate_func):
    __private_attrs__ = ['a', 'b', 'c']
    def __init__(self):
        self.a = 1
        self.b = 2
        self.c = 3

    def public_way(self):
        print(self.a, self.b, self.c)

obj = MyClass()
obj.public_way()  # (1, 2, 3)

If the method will be decorated, the property, classmethod and staticmethod will be supported. For the other, you can use the PrivateWrapProxy to wrap the function:

from private_attribute import PrivateAttrBase, PrivateWrapProxy

class MyClass(PrivateAttrBase):
    __private_attrs__ = ['a', 'b', 'c']
    @PrivateWrapProxy(decorator1())
    @PrivateWrapProxy(decorator2())
    def method1(self):
        ...

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

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

    @method2.attr_name
    @PrivateWrapProxy(lambda _: _)
    def method2(self):
        ...

The PrivateWrapProxy is a decorator, and it will wrap the function with the decorator. When it decorates the method, it returns a _PrivateWrap object.

The _PrivateWrap has the public api result. It returns the original decoratored result.

from private_attribute import PrivateAttrBase, PrivateWrapProxy

class MyClass(PrivateAttrBase):
    __private_attrs__ = ['a', 'b', 'c']
    @PrivateWrapProxy(decorator1())
    @PrivateWrapProxy(decorator2())
    def method1(self):
        ...

    @PrivateWrapProxy(method1.result.conflict_attr_name1, method1) # Use the argument "method1" to save old func
    def method1(self):
        ...

    @PrivateWrapProxy(method1.result.conflict_attr_name2, method1)
    def method1(self):
        ...

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

Notes

  • All of the private attributes class must contain the __private_attrs__ attribute.
  • The __private_attrs__ attribute must be a sequence of strings.
  • You cannot define the name which in __slots__ to __private_attrs__.
  • When you define __slots__ and __private_attrs__ in one class, the attributes in __private_attrs__ can also be defined in the methods, even though they are not in __slots__.
  • All of the object that is the instance of the class "PrivateAttrBase" or its subclass are default to be unable to be pickled.
  • Finally the attributes' names in __private_attrs__ will be change to a tuple with two hash.
  • Finally the _PrivateWrap object will be recoveried to the original object.
  • One class defined in another class cannot use another class's private attribute.
  • One parent class defined an attribute which not in __private_attrs__ or not a PrivateAttrType instance, the child class shouldn't contain the attribute in its __private_attrs__.

License

MIT

Requirement

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

Support

Now it doesn't support "PyPy".

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

private_attribute_cpp-1.0.3.tar.gz (20.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

private_attribute_cpp-1.0.3-cp314-cp314t-win_amd64.whl (74.3 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.0.3-cp314-cp314t-win32.whl (59.8 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

private_attribute_cpp-1.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (970.7 kB view details)

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

private_attribute_cpp-1.0.3-cp314-cp314t-macosx_11_0_arm64.whl (71.0 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.0.3-cp314-cp314-win_amd64.whl (73.3 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.0.3-cp314-cp314-win32.whl (59.0 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.0.3-cp314-cp314-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (982.3 kB view details)

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

private_attribute_cpp-1.0.3-cp314-cp314-macosx_11_0_arm64.whl (70.1 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.0.3-cp313-cp313t-win_amd64.whl (72.4 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.0.3-cp313-cp313t-win32.whl (58.4 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

private_attribute_cpp-1.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (971.0 kB view details)

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

private_attribute_cpp-1.0.3-cp313-cp313t-macosx_11_0_arm64.whl (71.0 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.0.3-cp313-cp313-win_amd64.whl (71.7 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.0.3-cp313-cp313-win32.whl (57.7 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.0.3-cp313-cp313-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (983.1 kB view details)

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

private_attribute_cpp-1.0.3-cp313-cp313-macosx_11_0_arm64.whl (70.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.0.3-cp312-cp312-win_amd64.whl (71.7 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.0.3-cp312-cp312-win32.whl (57.7 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.0.3-cp312-cp312-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (982.9 kB view details)

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

private_attribute_cpp-1.0.3-cp312-cp312-macosx_11_0_arm64.whl (70.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.0.3-cp311-cp311-win_amd64.whl (71.4 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.0.3-cp311-cp311-win32.whl (57.5 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.0.3-cp311-cp311-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (986.7 kB view details)

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

private_attribute_cpp-1.0.3-cp311-cp311-macosx_11_0_arm64.whl (69.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.0.3-cp310-cp310-win_amd64.whl (71.4 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.0.3-cp310-cp310-win32.whl (57.5 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.0.3-cp310-cp310-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.0.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (982.8 kB view details)

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

private_attribute_cpp-1.0.3-cp310-cp310-macosx_11_0_arm64.whl (70.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for private_attribute_cpp-1.0.3.tar.gz
Algorithm Hash digest
SHA256 e2710d1588169aaba67822c24eaa15c68ed88630c7028565b72f5785bda49c8b
MD5 38a9560434aaf7462786005fa045e9af
BLAKE2b-256 f9e1740394067401236124899ac2389b9746d9929cac2c0545ec8bf6a324f60f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 fe369cfe59f90f2ff8c3b77cbfb0cb80913302a171d3b15436bcfa48971caa7e
MD5 b6032291030dd10539d9f60752436510
BLAKE2b-256 5c269779d5305f9280b8bc0fbcc8d032833956bdf1c14d57ae608445bc047379

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 790e1b4186013b81be0982679d5c3c414ab837268d0fbaf26dec6580850cf52e
MD5 f6fb6d58d9da98b8b1b90e9df79d92e7
BLAKE2b-256 837ee805b030a24e831327f27fd264a82104fe77cfabbf433f843f4671bbf958

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c500736c61b9175150bc73d42509c22bb70f80f6702a4e675f91249fb6cc0e50
MD5 e4f8aa6c741536720d65a33c9362f043
BLAKE2b-256 82292965ca6ea9a84f67023baf94d44af16dc052fb56b785bb84e585d8475e15

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 93cf9cb0b157ac71dcec1e69367fc5d704ce2a6fa80e3739c2bfac3816ed1574
MD5 613bb3d59f205245867635e016979f07
BLAKE2b-256 25e1dd0e6b053d36ef9c6e361d96278dce71997125536bf9b64980e72197377a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a2f2a56c3b371883bdb58b411cf4ad6883d98e4ab6d48f1d1da82a63f7ade813
MD5 ee4ac7870c683a47c768b6c0bd32b8b2
BLAKE2b-256 b8e8ca5edabfcda2679355e489ca45ecd4e818104e69c2afb334642fab0ebbc9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 ebff53f103433419d643ff4ba2990748a9b34ab47e7080e9bc045fde6d785059
MD5 714830665491875e2838bc85919e3274
BLAKE2b-256 ebc18eaeb3f2312d231ea11aecd3d5dca190ad4777705b842c6a6a7269c2b791

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 feaba25e67128272bdf3e1316cda449477bcb54ab20f99b0f904a5d9f8bdeba2
MD5 6f36b43e0b79aa0083fc5b53fe848efe
BLAKE2b-256 1fb6e07031ad365f5b877a3a30e070dc99344c2541dedfae411d920de3916f67

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 95ca2b4f580eceae449919e47416dc52984086b4d609358618a07cc3a99264b5
MD5 2abb12800b5d39cb83b9f51d19562198
BLAKE2b-256 509398804040af366bd5297bf84e752e0692cd843dcb5eb40371805467c8192c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1b8edb10666af8d702073975004669cc35c7e59d39cb0b742f28eb80c7a51922
MD5 1c9528cebd7dd9a7c2c9fb3e218cf965
BLAKE2b-256 4c138f8b140a4dad1bf2f42664bd4f717569b3d3fe6be93b5a6f2ab59ace99b8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 088fe441ecfd85e09d990343af93f3f04272cbc522e8b838b79f7d3e40a01ddf
MD5 d18ea6aafa8c1a2bbaa3ab400615af7b
BLAKE2b-256 9c20a5e12ada7e762653be6a0245d7fceb874b0aa43ed6220faa4d3299e84cda

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 432dd2d4a271d67b8354c7ecb3ae3890a29b4224efe9f1a77be7a5a5e3759d03
MD5 1128e3eda985b8c36da9af71b7d62276
BLAKE2b-256 a5467d185fef61c03d0ae16c4d2de4b9f2090de08fd353f57be3dbe1860ed0c3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 aebcc35fea9887556d70c0ec930dee0722e93c4c63fec75649dc5437d296728b
MD5 1746951a7a94151c7614fa7d307b7431
BLAKE2b-256 6c5979015d64e789183ddd6b19b280e4dcbb29b46cbafcfb358b61c2961874e4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 63650182a7ad4a4199daea86ec243eee928cac0526c57bb554236188d53f2c89
MD5 b9c5e5535bc87de253d2cb0c3f0cafeb
BLAKE2b-256 3864367175bd6f6115ef219392e51c0c4845b294537d4b5f3934080b7c4ba472

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 068f7b1d65cc897a74fd3ae215ae885aaf18745c144caf3d0c27bff6d5b03ddc
MD5 90dd8f0189a509724ec94f912a4fbac8
BLAKE2b-256 b6731979d3add323af7e75fd0a78fbd6dc3f948a21715b50e96a2d4fa41386b9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 734e95ba1894ec048632caeffec202c4d20e2f1d2ff02604f5338d27f8cb14bf
MD5 76e072a832eb6dcad515627cdb329a7b
BLAKE2b-256 045abbf59a59386b9d8025c7450d726ef1d50d4608874d793afaba6df4c3cc3b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 ba2d0f542719f9686561943b0d828b02dfa56e910da04c35f948466992aa3913
MD5 5da84c7cbdcd3bdf740284231465ac7a
BLAKE2b-256 bcc57bf2e257ccd4207f3efe240f48a6e324950f76c29e695bc50625bdbf6970

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 a1cee7c2f07602587454e88f402267122a5ab92fdaadacb465824ef55784f00d
MD5 9076309520137b5bb2761a055d0f7f79
BLAKE2b-256 a907d6fadae862ac654ea14028756a1b37e5bcaf0fdef8145ed07182ddcc05af

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2323cdade2471f297c91396ab7c7d5d1ed1dfd609c9cc0f8d52e7fa5a0d47161
MD5 b98e0466c33b98c15cfef8607e972fc3
BLAKE2b-256 0220a54d3de87fe521bfece166e6ce472147ac3aca812c614a8b0728c9a0eeb0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 72d7ecccc08d1c5d471dd73bbbdf1d5981fe9933e57527f982432ff0eadf4eb7
MD5 7e0bf16c7bf6ff8573270efa693bd6b7
BLAKE2b-256 640462b1335649bf1dbdc4b0c04fa23883a08261cdeb369356fed67e939904e1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 08ecff413213fd908d7cb69c66b90277793f544f8a417c1af33d7499424ddab0
MD5 a6ddd801f83fe9e030f4b466cecc4efc
BLAKE2b-256 8a0e62bb6c9e94beedb029c204a167cee4f055b613fc19c86170861476818412

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 11486642319d6b6af85ae771273533709608280ce4670fa5bf42808fb23fd6ba
MD5 c9c12cb8f5c5042346b9661225595e0d
BLAKE2b-256 7d589cac0795e26365a996e5a963947e229cb176ab18f6d08fd6ce29f9c2fbfd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 fa79a708cac4650c9a5e1fa9aadbae08c1f8e9fd65ac8f78165c754f1ac54b4f
MD5 be5fba4f9ff423cebaa8c3db04d688fb
BLAKE2b-256 f0aaed19c0436260dec647577efefa86e89ab95b638969ff414a6d1378a4631a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e0116f200dd137d7b2b02ac9182b4e91d26e7bc92119d73ac3a872775029502d
MD5 bd7ebc0c76b6c6e0b646ec1e1dbf7ab6
BLAKE2b-256 8495f9e0a5572046bdf76ae90742a4d67a41c4580e3043a74181ce36ff8fd38e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 13b890242d9d1b8c325b226874a5fb40aeda574473864c2c4bcfce3e94ad45da
MD5 db4da55de226d013bf71c7880794523f
BLAKE2b-256 b18010bac1431b65c88d89a5b5542b83062f419078364bfda37ec896d7179342

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4047b00a30f84d81b838d15ad3e60536ff18e64ccc2634fd53a9994ba9690f2d
MD5 bb168c6d53d31945061149e945c3e595
BLAKE2b-256 70919623ae97f30bf77ac40d30213bda488c57fbcea0e8222eefd4224ce0aed7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 31b168ee7f71550ee8ea2249922ccbe756fc4452618528137bb1f33a3358032a
MD5 033fda5354616af203d9ef8264f944f1
BLAKE2b-256 99c06c2d9580b3f0381817a5b0a928cd3838b132a8922d7ca186df841ec9e3d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 7ef38c2c26fb4cf10b60fd4d1618dc084a53b8743ddfda9d71705f9a5d068238
MD5 a384ea5cb8d1185fa462b6d55f41e0dd
BLAKE2b-256 9556c597322acb8119e1abf77ad0a03b2957f277e4ebbb93250002c85df8b0ce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 24bc5767f59d60fb09b7ad80222ba01f9c553a66ee65356a0fe41a26849437c3
MD5 676e83817e6e361e0f330f43bba9d630
BLAKE2b-256 833ebe2ffde9d1dff6bd56cb74186eb2cc49fc81c3e547a415158c4de7aa4309

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d85c07ef6cbbd50035f3f80808efe36a114e0487c80fbeead9dd9bdbb6bc65c4
MD5 f6d9d471d1d3500503df52631e71d988
BLAKE2b-256 a64b025ab1aa11cac48e56ff6878a4b6b8c6625d6536530447860fe0fbfd907b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d6aa1543b5778d5ffdfe431290bf83a8c414fb249565df7440c700b5717162cb
MD5 e6dbe7da379de2f81a7f4818241371d0
BLAKE2b-256 a42b750f75db95b7285256a712a4d5f1d705cc09e0844ff501f2420289a5e9a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 827232d4e15d133813662cb3278dfc32c040263994cdac97d1829e05fcae7a34
MD5 cf170f9f02a4e2500d11ff9e27390262
BLAKE2b-256 ed247bbe6b348183e92ce3adb490470be066965b00d3ae88c2abba36c0c5898f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 63de6378d6ee35031966e7e7613498ffb5411506ebd70145c49dac535ff9c777
MD5 21943c633685996c6b796dda26239bb3
BLAKE2b-256 50524b8383a35b3305f9544db662246a6e36f5e3d1ff9ffa2136aaab2116fc16

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d3b5e41b10489deecb63565547804abfed0709238019f6eb2c19192021fdded8
MD5 5e55c9d912cc4e98dea8e597cf09c8ff
BLAKE2b-256 59c821be24af58ceb67a5b170c755666132dedabbcf07fd3c983de3bdd1ce4d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8510b472b6c332767ae66cea69858f7f7dac453f8b79312230df72ce2c5587bb
MD5 7edd5fd3ba70f58cf0c79805a08e2a80
BLAKE2b-256 2c385792412957ae89ad0c04d4138e33f4f89423e10cc4cf1e79c667ecfdc4e4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c248fa8c3d5e9114a733b1b94ef68f0adba8967641fe64c40109c411427fcdaa
MD5 2f9031269c48bcb0165426d3d41495d2
BLAKE2b-256 2ebfbe5d53a9a9e4d634ac7c73606145e23fce2152a6bad30e8061529233e54a

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