Skip to main content

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

Reason this release was yanked:

has bug in setup.py

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.1.tar.gz (21.0 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.1-cp314-cp314-win_amd64.whl (73.6 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.0.1-cp314-cp314-win32.whl (59.1 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.0.1-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.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (987.6 kB view details)

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

private_attribute_cpp-1.0.1-cp314-cp314-macosx_11_0_arm64.whl (70.2 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.0.1-cp313-cp313-win_amd64.whl (71.6 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.0.1-cp313-cp313-win32.whl (57.8 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.0.1-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.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (988.5 kB view details)

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

private_attribute_cpp-1.0.1-cp313-cp313-macosx_11_0_arm64.whl (70.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.0.1-cp312-cp312-win_amd64.whl (71.6 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.0.1-cp312-cp312-win32.whl (57.8 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.0.1-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.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (988.2 kB view details)

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

private_attribute_cpp-1.0.1-cp312-cp312-macosx_11_0_arm64.whl (70.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.0.1-cp311-cp311-win_amd64.whl (71.5 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.0.1-cp311-cp311-win32.whl (57.7 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.0.1-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.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (988.3 kB view details)

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

private_attribute_cpp-1.0.1-cp311-cp311-macosx_11_0_arm64.whl (70.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.0.1-cp310-cp310-win32.whl (57.7 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.0.1-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.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (985.7 kB view details)

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

private_attribute_cpp-1.0.1-cp310-cp310-macosx_11_0_arm64.whl (70.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-1.0.1.tar.gz
  • Upload date:
  • Size: 21.0 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.1.tar.gz
Algorithm Hash digest
SHA256 d70b2c81c789a3d2937a8389a849f6a86b2d682ed5b293e570871dc289f16a6b
MD5 dfc2977e0692e471d707b56e18ab0b36
BLAKE2b-256 51164c7ff2a5575f295d911d4f12c92e3b298b187a3285a2ece04e6fcb389ef5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 52cfa424c85c903cf9d7be5fc120c8d81e39a255cefddd7ae511387e08d1d782
MD5 e217a9c8c748f4eec5b4fed901d62f4d
BLAKE2b-256 56b9beaf3d19fa32cbdb5bc9d728c5d1edebc31b1d5063c89f5587c3108a1026

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 f49a553594e6956449c5aac6506971186cf2560d7854556d81dbc9e037fb3c39
MD5 9fb46d04b2b004fe8ec6fc6db9e9d499
BLAKE2b-256 9ef81107e0fd87dbb75d34a85e5885fa10c5f3f7c2d05091bc8696261f29b8d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 44dda531a73c21e7eeb11f884b48a447785e76cc5297aedba2ce3a8d5a9b5cc1
MD5 ea9f42332ad6e8debfe01206eac6c2e5
BLAKE2b-256 00f4a027eac9ffe0ae15d62f2b7655c5fd6503bf0ac72399b8e100b647eb823b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e1782ae3b4c29a033a5b1cda5fd335476d671a8d7b43c0935f3e63763ffcaad1
MD5 7666fa6e8f86ac47c6aa63f7404092ee
BLAKE2b-256 bec48114242199a13a761ccaed0d4c65e66e4ba744521bdce2a6de9d10c7ced0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 96f850777c8b2e55afe096409a6430591902a7b0c8bedd7e652bc0f90de219ad
MD5 a64cc31432bb18561ca979ade69d4213
BLAKE2b-256 bc2632ccc7238750d15e8ad6c21581ac50d830c2e0a319a4445d601353aa8dd6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 ac93407070ad2eab0934c196791df0fe2ec5dccb82d79c1966e3bcc6accfbbf7
MD5 a4ba8b41bcd1085b9f4a5a8fd5610f9f
BLAKE2b-256 003188cc2cde0b3a126247fa83a0144490aefe24286d232422ca48c6f8d7c3f1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 0d6c9e0dc25495120f5394b85150755d66f8b608973ed2b37395594890cce79b
MD5 02a88d4c2f6f0f3bb8290d70e0c1d530
BLAKE2b-256 105edd3d80a4d9a087ded7837137f6b83441ae2e92bbc5158fd69ab3592b00bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d8d7301ebef0d6119af548620a73adb45b40153e355bc6265d36417f6555e865
MD5 6ac866224135072cd84e090bc730dc79
BLAKE2b-256 007c6ccd2e1b08bb9622ca1b9ded7d78b8f2183dce6c5d712823ff729725da7f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d16f5bdd812b3dc445f5172547fe98971858c40abbb0be0aefdd916ed584cd83
MD5 1b81f9b3d8eda457f31a02335e493dcb
BLAKE2b-256 b8741be855e45da131559a2fd6094475aedca416a88fc04478cf566e5e43a4b8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f72f07729a381de96d9e8a4233cffe3dc37b666f1bcff582bc4fcf45299f87cb
MD5 d388e3cfb99d24322cfcda0eee3d09a1
BLAKE2b-256 9b1deb1a5dd7ac2648d7c341aa270f5f14449bc97243eef4bddc33c5929e30b3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 8b05ec4c9b762e4557a62c1e03bbc0d93e96be425e3df95c3b7dc4a7fbcc2d51
MD5 01e3bbe794160f7b9b88877fde168abb
BLAKE2b-256 bf7fd3313d5865ee84328a69aabc5aad9731480d56aa05b2dee1e61e35554397

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 6f33a80cc8c5c810b190b8e20d97e3eb89a66c51e220ac0e5cf90af7f82107a2
MD5 881c52a5e80fe66e36b16e2b362fb72f
BLAKE2b-256 130c44866c13ab0a8ebcfd07a7f958ffc21e70a2ec4ad4fe45210316782a16aa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e697a85fccea61d28af5852bc6f72ad294d1f6744a0a345264d836b6ea420c1c
MD5 4d07c9675c6397e0f33d7fca7b2581d7
BLAKE2b-256 bee1d9262b028ead63a5f8aeef9ef7f3cfd93a5646ff113a1b8b86c43ae7164b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b0233c912065b63db5ce83b31410028fdb846be8af3ac63168bce39b889b8a04
MD5 03dc0795d7008028ff649b3e2a8a4e40
BLAKE2b-256 5eb2472c57a8f51b21729732b8b403029a15bd1538b59a021dc259db406ff47b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2d06dd5d215cde134572d2bd5fc18a4f06500891caef6ccb3598682b167a7b4f
MD5 f3526d5d979049616683834db5ad850c
BLAKE2b-256 fe5e3d7b4e409c21e2ddecc6802df02683435661ad8ed7398da15d52d7da0e14

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 c6595266a00627f13667e6e8cdc1417266688d6351b3a261e5a8baa43c269209
MD5 74105d767db4c27c6dbfcf10faffd0e0
BLAKE2b-256 18388175d7bc1f161f6693f0b0e48e3701b69e5982f23f95c976c4b64a41353c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 2b9ff9fba7c32361f3ab622c9b49f5e8cb6af97c579362cad593930769ee42cf
MD5 0b6a17fdb49373b0f2726dabcc0c77a9
BLAKE2b-256 c941f80afa3477e50739b49c89b581dd9fd70c91a7caa10788794052f18282ab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8c2d12ac32707ba5f35820de728f6e074c546499c35c54d061957629bcb4f3cc
MD5 5120d83d3330a2f5c1d67b2e555275c5
BLAKE2b-256 1da3843e77cb8c7f5192b585c46999278b1da4d62d94c2aa207961f0db955fe1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dc1edf18f082a1de0fa1845dce5a063c80c8b107390c72f3fcb6a8b182bf9a76
MD5 ab4d4934424870d312f28851c8404aee
BLAKE2b-256 f0c353d6d0c9a47a6bd452aeb2fbd188c56e8fd5e7f071112459983b33d8159b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ce7c2b27ad410e49d7b85402fbe074e3f84fb1f1ebef6029c3697b5246334c92
MD5 8e56cb7c5ce6e295800e009361c1c8cc
BLAKE2b-256 44b5cb688d9700f94f3a8ccb9071ddb121c5e9e047b758b5fe4a1d7bf71ab490

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 13b9f95fd34de857f8922a54b58dbe75b9d31d668e4f21e47cfa5a2fecfd9a2a
MD5 007acc5e923d9b7dd96c421048b0b40f
BLAKE2b-256 af68e8df6b16934196e09b551c61295aaa11d156e2ae0c59fad7ad67f4e91d23

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 2f78d5dc8420f29bf099ffb6938ec6c01d1ffbc968569609a49121230afee852
MD5 1cad2958d8a358d8827a42c6ea0a6854
BLAKE2b-256 ac2a508603839ffb3002aced1917abcf341f990f150d09c9aae02883fc683845

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b1782f8c7910241da8aeacf90bc80762cb0c4368deeb9a38a2385d861e710863
MD5 ecc1a0c3658e645816b426add6e9feb2
BLAKE2b-256 d72f2407016c602809c86f5f7302a6db86972e69a874f40d134ef365cd693500

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 976c9bae408ed75e978b1b41e921cf1a826f1b578e3aa76e0d0e0a0885950f53
MD5 e40e9978a1be4aa6a3a80f9922a0101a
BLAKE2b-256 f032e7b26e8f3bd8e1a276bb7a8fe4563b7325bcff8e026451721bd9f8173b87

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8adc807eacea3abdcfafa499332ecebb5414e84a500335142f254407841560a1
MD5 84cbc74ea85a1edc5047da5ca8d1f46d
BLAKE2b-256 805b8224cb069da91dda9f200a288339b4e36ec624eed0d6da5c3e144a11613e

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