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.0.tar.gz (16.6 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.0-cp314-cp314-win_amd64.whl (73.1 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.0.0-cp314-cp314-win32.whl (58.6 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.0.0-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.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (987.1 kB view details)

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

private_attribute_cpp-1.0.0-cp314-cp314-macosx_11_0_arm64.whl (69.7 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.0.0-cp313-cp313-win_amd64.whl (71.1 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.0.0-cp313-cp313-win32.whl (57.3 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.0.0-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.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (988.0 kB view details)

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

private_attribute_cpp-1.0.0-cp313-cp313-macosx_11_0_arm64.whl (69.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.0.0-cp312-cp312-win_amd64.whl (71.1 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.0.0-cp312-cp312-win32.whl (57.3 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.0.0-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.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (987.7 kB view details)

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

private_attribute_cpp-1.0.0-cp312-cp312-macosx_11_0_arm64.whl (69.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.0.0-cp311-cp311-win_amd64.whl (70.9 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.0.0-cp311-cp311-win32.whl (57.1 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.0.0-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.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (987.8 kB view details)

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

private_attribute_cpp-1.0.0-cp311-cp311-macosx_11_0_arm64.whl (69.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.0.0-cp310-cp310-win_amd64.whl (70.9 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.0.0-cp310-cp310-win32.whl (57.1 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.0.0-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.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (985.2 kB view details)

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

private_attribute_cpp-1.0.0-cp310-cp310-macosx_11_0_arm64.whl (69.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-1.0.0.tar.gz
  • Upload date:
  • Size: 16.6 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.0.tar.gz
Algorithm Hash digest
SHA256 63594b0d55f87c371451f8a6f194d157282de290bcda77369eb790dd31ead2df
MD5 f2a5d81b4d238988899902876921dfd6
BLAKE2b-256 bf15f16319b4634c67242cff3d69be447d1dd99deccaaa03b7d3bd06b02f4dbb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 95d8168640ed2e01361207c1367632b2b393fd665b51bfdf3e36c1900b91f20f
MD5 0a346185d5d12b1e61817f3140dbdb26
BLAKE2b-256 fb3d229591c35031a3ec9e9555f516b4f50da9385f6e5269b0c392dbcf08412c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 e5b89cd84a3ade3b9f12e3109577deb58da602edd4819ab9764aea7cc78e17ff
MD5 e66cf425d8797ba89176420dbb91a8c9
BLAKE2b-256 0ce8568c1e102e98e31e64bbd28ff87bddebbd8ba51114625df96978f473f898

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 42b834eb7367e4e1febf8e92b7141c38f2052c86170f10f4031bf82838660e4f
MD5 d493050129eccf0f19875ec400ef9721
BLAKE2b-256 39827ad07ea0a6a9102d17aa4b17fa9708211436ba88a4e902c80444edb0c0ee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ff2fdb1e3345a785037655cd79fbae9d4ff58c42effed2fc18d08c26dfafffca
MD5 7d1e83527614f4b32700656a12a92d1c
BLAKE2b-256 b15782364bbbd0ff686f7cae6bfb75940f05f1729dcd8afdd496f43fbc1de90a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b5977f7ab395d2555822c0164006279d73a1a6bd465f777ea8fbd5b4f38809a0
MD5 00b634bf9e4e028aae7b6f4dc9dcce47
BLAKE2b-256 c6b0bb0b3a9ebd4847e461284490aa8de4c3927d189daf48d537a27b82f94889

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c24e8d70669898be10c319376477e63178508508d70e2307747408d7999740f2
MD5 3e47130d67983e03364ef659dbf8660e
BLAKE2b-256 3d7e0d942de982ae11de7aeab3cfd5f326d5171bc14fcb82812f41d02f3c4ffc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 b7d58c0ea12412fadaeaada542b8e864b8f2a5cf0383d1d35df7afd597846eb3
MD5 a7a4b00cb6707be1d849989966beb0f0
BLAKE2b-256 e2707dd5d41bfb62b6772853735b3b948aaa47efb2df668e0b80d6b03a303f81

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3b6a52365c9856a8515de98dd284d727765e49bc017347cc6c41368ec6ec9a89
MD5 ff1544de741c50b58878511e8d232fec
BLAKE2b-256 04cf9b8177ee082e1cec9e5f8618125bc189a960ca8b546a2d03fff65bf40d37

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 64fac3799d376fb0a508216d2318fdd8ccc4d914e8e322f181fab4c054e12a29
MD5 eb842001902f6e863f509b6d473fc158
BLAKE2b-256 d0967f2bcf8137b186f53b2a545a77516ba53ee5f139db0c266d7e90b07b1efa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 89dd01fbe77e359ca6ee7e6e4d6b670cfb55233ec3e6c4f4c3ecf72dfd22dcf2
MD5 e5d0dc762a8ed8e8142e20764ccbc711
BLAKE2b-256 02cd2daa93d002c547dea9ba537293ed6293ef4492bb75cff9ee3a99661aaadd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1c4d5db006fa8c42ffe797a12d1eacb421a329401996570a1b9b1f083e2014a5
MD5 c904da4a472318075986ebf4da77ce7e
BLAKE2b-256 245dd688617c6205bf4ed9df6f52e409ba4de436ced1a130aaeb6605808f13c5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 a8c63c99adbcf9a0bda9e6cfa6f101671b65ed174536f67d1c6458c0618c48e2
MD5 fedb0011ff2a79b61ee883eaf6d0d8a5
BLAKE2b-256 792c0169f9d0019353e2487c1ab032e76ec4b318f88f05e275117fd5d608762f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 35664416068e0b4ad488c5ea69679d2afd4c750a30aa16195d12b16b78528856
MD5 268db57140f53cecf2197b8c8908a91a
BLAKE2b-256 f700db855e97878e8319d63eee40ac1c4e72c69ea54e48155a0c1911c5b1ced9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0ffd6d69a95be0075561417415d210efe96ee08c02ff16043ad27418fac3be3a
MD5 1953716eefd8073786a698167e517e1f
BLAKE2b-256 c5efd98be5b632f337d8c0daf3b6a0ff9169f90182d8ed5396bd0960918a6571

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c8c0f17e54321bcbaf07a6be3d369eca0cc2dea38e0571f5a9ac7f9d4a71f8b5
MD5 83cbc11f0171ec5b5681ab052b8e86cb
BLAKE2b-256 8b12a10a8f848d2bcc09a6bce9f00c3f6ce457901df1fdb1975ae16aff817769

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e7f693ec8017d7871198e2b4f87d2dd6018ee825e37a72faa106f5c4ff709740
MD5 fd96e871505d94cf1d653ce3cce42a70
BLAKE2b-256 91d1cdf97cdbe56d491afd3a8f571eebb47d20cfb612c8bfb785a992c82b6d77

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 fd81930864641d35b9a76050e8c43124c64e9b04a1dd7f8e02c4a464003f9812
MD5 c8071b7a73e0e7307b2e8476b959ee0b
BLAKE2b-256 607af7696d5bfd44b2f7af374b4c0705dbe958cf94ba223499b1a2a605924927

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5a07fe65dc4b3e7f420b852c5a3ae5ae3de335299049b9ca13097d6525651d10
MD5 5786277c6d6bb63e47c67eb290ea1b89
BLAKE2b-256 0b85cb8bf15fa49cf962c947779ba1f2af109ff4580528c0cc28c98ba991964b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2041b82998363af7bc51f2ecf4a91e58c1b7372ffe3a4c9b824d7ffa8c59600a
MD5 135396a2d1538b5834525015a7ccc2f1
BLAKE2b-256 8b625548e19e1a116cfe69938a4fb6f6360ca9c22b70025cdb6031ea9a31feaf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5ad13b780f5d5958f1cc31c9ea6352829cec08302a0662a1dc88b4b86428124d
MD5 20c7927b0d805c32acbf403d158a7091
BLAKE2b-256 69b94c995eb3f0c938872a415a1c2f9f7cefe26d831839b83d71502669a5315a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 fbb49129c65eb9359780097e8843574649eae0cbe734b227c0b2a0b92b204ede
MD5 8475a5c6d82be161016cd0c2622b9091
BLAKE2b-256 526be509b101935f557b4af41f6d78970a3f7566844cb8979d4dc1d7eeb6e54b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 1c1f1e51a60bcd5f269af2108ab887f160d27d890b71483cbbe5c2cb2915683b
MD5 9f3eac8afb46f9a27db3b89a407a53db
BLAKE2b-256 e4ea790a20dcef3b04b1f22390501605a0175a2e50cd698f7b8984ec88551303

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5238d403704a38717a7a9d5c9eb89860446a84bed995a7a21793adc0e59ff564
MD5 dc2a9a82330a7e5bf9b136a9136b4fc9
BLAKE2b-256 8efabb83a88fa6aef2ed3bd94eb7a0e4d33ae272d42e85ceffdb320268d09ac9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 be0d4856ee8dd068f5beea1bc04c95aa40427b55be9db75d82c68d2dabeacd5b
MD5 b1d6e47d3010bc437f06391a57fa94be
BLAKE2b-256 159b886d8c0db79d111feb3c7278044f3d08eec6b3fae536d2dc93163807a9ed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.0.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bcc0927055df326dae34c3fd5d017eb4a922a8649ec0178e471b39fe55c9a294
MD5 26a438ad736e4aad1f80d6c1248088c2
BLAKE2b-256 96afe9394b68ec5dd9fd56d93874440d0b56156f7cdc52e1cbb2c7c395f9fa5f

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