Skip to main content

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

Project description

Private Attribute (c++ implementation)

Introduction

This package provide a way to create the private attribute like "C++" does.

All Base API

from private_attribute import (PrivateAttrBase, PrivateWrapProxy)      # 1 Import public API

def my_generate_func(obj_id, attr_name):                           # 2 Optional: custom name generator
    return f"_hidden_{obj_id}_{attr_name}"

class MyClass(PrivateAttrBase, private_func=my_generate_func):     # 3 Inherit + optional custom generator
    __private_attrs__ = ['a', 'b', 'c', 'result', 'conflicted_name']  # 4 Must declare all private attrs

    def __init__(self):
        self.a = 1
        self.b = 2
        self.c = 3
        self.result = 42                    # deliberately conflicts with internal names

    # Normal methods can freely access private attributes
    def public_way(self):
        print(self.a, self.b, self.c)

    # Real-world case: method wrapped by multiple decorators
    @PrivateWrapProxy(memoize())                                   # 5 Apply any decorator safely
    @PrivateWrapProxy(login_required())                            # 5 Stack as many as needed
    @PrivateWrapProxy(rate_limit(calls=10))                        # 5
    def expensive_api_call(self, x):                               # First definition (will be wrapped)
        def inner(...):
            return some_implementation(self.a, self.b, self.c, x)
        inner(...)
        return heavy_computation(self.a, self.b, self.c, x)

    # Fix decorator order + resolve name conflicts
    @PrivateWrapProxy(expensive_api_call.result.name2, expensive_api_call)    # 6 Chain .result to push decorators down
    @PrivateWrapProxy(expensive_api_call.result.name1, expensive_api_call)    # 6 Resolve conflict with internal names
    def expensive_api_call(self, x):         # Final real implementation
        return heavy_computation(self.a, self.b, self.c, x)


# ====================== Usage ======================
obj = MyClass()
obj.public_way()                    # prints: 1 2 3

print(hasattr(obj, 'a'))            # False – truly hidden from outside
print(obj.expensive_api_call(10))   # works with all decorators applied
# API Purpose Required?
1 PrivateAttrBase Base class – must inherit Yes
1 PrivateWrapProxy Decorator wrapper for arbitrary decorators When needed
2 private_func=callable Custom hidden-name generator Optional
3 Pass private_func in class definition Same as above Optional
4 __private_attrs__ list Declare which attributes are private Yes
5 @PrivateWrapProxy(...) Make any decorator compatible with private attributes When needed
6 method.result.xxx chain + dummy wrap Fix decorator order and name conflicts When needed

Usage

This is a simple usage about the module:

from private_attribute import PrivateAttrBase

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

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

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

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

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

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

def my_generate_func(obj_id, attr_name):
    return some_string

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

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

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

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

from private_attribute import PrivateAttrBase, PrivateWrapProxy

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

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

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

    @PrivateWrapProxy(method2.attr_name, method2) # Use the argument "method2" to save old func
    def method2(self):
        ...

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

The _PrivateWrap has the public api result and funcs. result returns the original decoratored result and funcs returns the tuple of the original functions.

from private_attribute import PrivateAttrBase, PrivateWrapProxy

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

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

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

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

Advanced API

define your metaclass based on one metaclass

You can define your metaclass based on one metaclass:

from abc import ABCMeta, abstractmethod
import private_attribute

class PrivateAbcMeta(ABCMeta):
    def __new__(cls, name, bases, attrs, **kwargs):
        temp = private_attribute.prepare(name, bases, attrs, **kwargs)
        typ = super().__new__(cls, temp.name, temp.bases, temp.attrs, **temp.kwds)
        private_attribute.postprocess(typ, temp)
        return typ

private_attribute.register_metaclass(PrivateAbcMeta)

By this way you create a metaclass both can behave as ABC and private attribute:

class MyClass(metaclass=PrivateAbcMeta):
    __private_attrs__ = ()
    __slots__ = ()

    @abstractmethod
    def my_function(self): ...

class MyImplement(MyClass):
    __private_attrs__ = ("_a",)
    def __init__(self, value=1):
        self._a = value

    def my_function(self):
        return self._a

Finally:

>>> a = MyImplement(1)
>>> a.my_function()
1
>>> a._a
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    a._a
AttributeError: private attribute
>>> MyClass()
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    MyClass()
TypeError: Can't instantiate abstract class MyClass without an implementation for abstract method 'my_function'

Notes

  • All of the private attributes class must contain the __private_attrs__ attribute.
  • The __private_attrs__ attribute must be a sequence of strings.
  • You cannot define the name which in __slots__ to __private_attrs__.
  • When you define __slots__ and __private_attrs__ in one class, the attributes in __private_attrs__ can also be defined in the methods, even though they are not in __slots__.
  • All of the object that is the instance of the class "PrivateAttrBase" or its subclass are default to be unable to be pickled.
  • Finally the attributes' names in __private_attrs__ will be change to a tuple with two hash.
  • Finally the _PrivateWrap object will be recoveried to the original object.
  • One class defined in another class cannot use another class's private attribute.
  • One parent class defined an attribute which not in __private_attrs__ or not a PrivateAttrType instance, the child class shouldn't contain the attribute in its __private_attrs__.
  • When combine with other metaclass, be ensure that the parent metaclass has no classmethod that can set subclasses' attributes. If it has, it will fail on new metaclass because the new metaclass you defined and registered will be immutable.
  • CPython may change "tp_getattro", "tp_setattro" and so on when you change the attribute "__getattribute__", "__setattr__" and so on. If you are fear about it, you can use ensure_type to reset those tp slots. For the other metaclasses, you can use ensure_metaclass to reset those tp slots. Also, don't set those methods on these classes in your code.

License

MIT

Requirement

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

Support

Now it doesn't support "PyPy".

Project details


Download files

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

Source Distribution

private_attribute_cpp-1.3.2.tar.gz (26.3 kB view details)

Uploaded Source

Built Distributions

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

private_attribute_cpp-1.3.2-cp314-cp314t-win_amd64.whl (86.6 kB view details)

Uploaded CPython 3.14tWindows x86-64

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

Uploaded CPython 3.14tWindows x86

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

Uploaded CPython 3.14tmacOS 11.0+ ARM64

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

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.3.2-cp314-cp314-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.3.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

private_attribute_cpp-1.3.2-cp314-cp314-macosx_11_0_arm64.whl (80.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.3.2-cp313-cp313t-win32.whl (68.6 kB view details)

Uploaded CPython 3.13tWindows x86

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

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.3.2-cp313-cp313-win_amd64.whl (82.4 kB view details)

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.3.2-cp313-cp313-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.3.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

private_attribute_cpp-1.3.2-cp313-cp313-macosx_11_0_arm64.whl (80.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.3.2-cp312-cp312-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.3.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

private_attribute_cpp-1.3.2-cp312-cp312-macosx_11_0_arm64.whl (80.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.3.2-cp311-cp311-win32.whl (67.0 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.3.2-cp311-cp311-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.3.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

private_attribute_cpp-1.3.2-cp311-cp311-macosx_11_0_arm64.whl (80.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.3.2-cp310-cp310-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.3.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

private_attribute_cpp-1.3.2-cp310-cp310-macosx_11_0_arm64.whl (80.1 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for private_attribute_cpp-1.3.2.tar.gz
Algorithm Hash digest
SHA256 478e28a9596b8b41bb04511815c8894ba9c2ec1bd94ac27f8ead5d02d1f513df
MD5 51729e685111d64db91a580fcf3edf03
BLAKE2b-256 971be202cd73bc8c14a2510c54450747ad9e21f4fc8cc83be811ed479e17578d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 0de76eebbf4cb9e1b6411563c145cae434eaf319fe8d45fe8ae6c26a1cd94f5a
MD5 d39ef7cb413a7a1830d219e24ecc5d48
BLAKE2b-256 bd8b486e225c8d6fd6ae123c897f6ff5ad98a7534aa88f3e9aaadcf5e3e6c931

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 07d6c65e6e8a0571424614b02a8fd2692113b3462cdc3f38e0d5d10b72b7e93e
MD5 dc50d6d9ebf70b28a3e7d570935a8508
BLAKE2b-256 8dc020f37b6531af86c59f798ff1425e3c759740a82bd7312abbb19c2473b79e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e926e94c428765df97fe1a62c47ad57e99046a915e929166ba86509c56140589
MD5 cfdba3f859a1e0006ad8131172d463dc
BLAKE2b-256 e035e3ee3dc483a6d655a18c3a844534f853209af761873a0ed81202a0369b2d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 671a1feb7ab943ca2b75ce3480facf2a10cda48e6e28e6d70ef0878b622e7081
MD5 3ca8faec909139f9d0d1cd5f703ec522
BLAKE2b-256 7e4b35660c474bc68b0df9603361924ddb14032367933d0589246e6a22232052

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1aca1f8ab27fb70d1be725a463974b782cd850dae745b909e0cc0fb323e69ad9
MD5 a6014aa9344bedac719be04cc468afc0
BLAKE2b-256 2bcd66cc44a559c0fa5020cf01b2413a7e8b877aeafef34c004a7eb6e05fa97f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 5b09710328a519dce493d731215842580aa639a73d6e1b7b043903e60d4130b3
MD5 2676fa085f20cd8368ab4d82dab00f1d
BLAKE2b-256 9d13cecdc99a772857595189f307d885018c6fd89d800154e094ee1fe6cc4e59

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 4088dcbbae1d783090a5dd6133d38069316a4a969b7db0cf4e9e27058479d342
MD5 63ab4fcd0ff06422654d5e6be52b4fa0
BLAKE2b-256 05ce46067182b9ce91d8a957150a526eb708d58f82b2632f5410f785fc28b246

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 784eb5282b6d1854f92bfe017e317ba1ddbad647de72b0bf9d56a1531bf46d83
MD5 29a24da71e7953aeeb8c82d7951081c7
BLAKE2b-256 dbfa0fa7a7324ff41c2995b94a08fedef45b55d2c91718bfcb47ec244ff71924

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 743ab170ae5b349712abcd1b74e2ef8cb5a7937a7f81fffec3eb7dda7869ef27
MD5 8b9d4bf6b9642c820757472b32248efc
BLAKE2b-256 596e3f9052d09b9b21a8f1d613ef010af10b1323223f81118b28d0b3cc70d23a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9c8b823bdeb26be7ca1a415877c277aa8d8d3db0368b0f55e01a981d851e15f6
MD5 cecee3024403533b65694d6f90b6de0c
BLAKE2b-256 468a3a8dbacd9b992fa08b2a3eb671784629282f6e88b6dba951d43fa4fb1665

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 18933d7475664ccccca994afb5fab3eda153030814220903bf94bfdd505fafdc
MD5 2a3fe991d8aeb10f4e888f92b3046ca4
BLAKE2b-256 5b66af74ba578bda347476dd10c7340c5290026d9dec65fdfb90f04be6639ff5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 67060d9b3ba0b0e890989d1b2fc956e8739f2ad3c97346a642360aa26e1f6611
MD5 6c1b2d8a4373a84c4ec2fc768b74a456
BLAKE2b-256 52f390bc5f6e05ca709dce6b9cf786f4db6c2018b7d3517e0ada73803d33e1a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2f39b422fad8e2e7223b949c8c542e121d138ec3deccaeab167de55d9ee4468d
MD5 d4484eec20662d6b52c436f25bf00b9e
BLAKE2b-256 9f6d60c1efc7c02ab139b27ed82555f137b1c250d9103ab7eaa27d7b6497a33a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b1c2de57f38d7e0d7547bdcc81371a2885680860324989cf5843b5a9567a68d5
MD5 59afc7d8c6012bf65b6c272f66e345f5
BLAKE2b-256 74d86f64ae1eca5d66502371822f7e886f8679fe0a3187ebe7a2f2be10d9882c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4eb86e9421a9f0258c057e7ce636210fa34f24a934f129a20b28ca0eb73343ae
MD5 69f66a1e427a5263ecc6e79455a0b4df
BLAKE2b-256 bd642642b4fc82ff3dc627ed27e2b5e54d11d4ba7796e483694f149db5a56ba3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 b276f883f067b81f77b135a35b328b8d44c7d0efdf4b3c25e716c13bb195cb7e
MD5 b6bfb0c47bd5a6cbbdbd4c24b1c86723
BLAKE2b-256 f5ec93afb86056bf06e8b2f81516f1348bb052b27ec0228663c594c9b874ae41

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 3af85557b33c68c0656fd531c7944049913c25e71f5dfbc9c5e73f21415804de
MD5 1a42f0ad14f351426cf8c24d5c8ce479
BLAKE2b-256 225f0313d462342144efbcfd0812faefcac16b72169eeb604ae3bbe4c4a3f792

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1e5e64834c3fb98fe0d5128a58be376501451147f92b171e48b4e415e7537928
MD5 4480c9ddba37f31befd41178e6737ae3
BLAKE2b-256 7a54904e110f4ee20c15aed71311c994bf9175a51f729e5a019a91b1a27f84a3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8f7ef970ec2a830a563b6c35c62e2b5ad6484fee224b626209f3c8202481803b
MD5 4df4410bf953136b91d3a9f1d8af6ea9
BLAKE2b-256 e002fed358ddb1629e24c381b75ae626784b70ee5fbef51665be84a0c391e478

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 17f5130140bfdf4c0f9935f2fa985fc2f548955ea3550cc36dabbf81f0e0bffb
MD5 600cc1b7ee3b6644a40a566cf0e9be02
BLAKE2b-256 88b7d1d7381e6ab4c57d56294964de267cebdd01d90a22c10e78ae2d9d31db06

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 35bb2de777f4ac8053d1d2ce1d4c1c3c92cd3cc6dc8d27234830009e08a58cbd
MD5 aeb1a519d40560dc8a670b56a456b450
BLAKE2b-256 0836601234ec89117c405817371026adb092663e886728b2d8aace24d6829cf5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 a0f63c49db591b6bc4a2c61d0c6e6dfc3c1baf7783a03d36b7e134dec7ef7bb6
MD5 e57a23c20062b65ff57d66ca2a3deba2
BLAKE2b-256 8d98bfd7ebdb0b393974b76d786599409a09e3fe6fd0b3f3fa8e175077690b6f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 dca44759c156c24da8d9d2ef192a22107b12aab47edf912f980819f16ebae280
MD5 d29413846f9f84e9382edd3d982169ce
BLAKE2b-256 f44785f9601cdd5a1ae697688c35d521334f555b83dad0557ed009eacf71d9d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f4670670356ca911156083d42f5ec5831454971b43af8218e3c7a407824d056a
MD5 1a2eb8e175c4888ea5e60e42bc21b27b
BLAKE2b-256 3ddb062a7c6b32bddf86eb78a6ad6e031d5eeee1edc52f5ba09554c7ece09200

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3d1fa11e42ace237ce4314bf424116983fbbafe0aca1c6ab4ed83558e5345a5c
MD5 53ddf8fa1b6a7c90bafff1f9b54513a3
BLAKE2b-256 0990014682897b7de6f83300d3dac334f391fdb3237b399a9486bfe39df5b1f6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f006fd99d5f0d1abcafdf2334519a1fc729a8704408c6f9d5eb8e0dc5895ab92
MD5 ef0d95718a3780300ede42ce173ff5c4
BLAKE2b-256 cd4f9a9106ee60c9be8e835ac4e3c4b358f9da4fd42e56fc1e21fadd50f24c1d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 ea0dc7921879e933d299f6532549f4d9a33e494bb5a5ea1110fd2036b86d5380
MD5 c1a3c716e864f6a8542a32b3ae5c161a
BLAKE2b-256 bd895af18c83bda1adc1016b443fe0cedf3970aef47891a2a5a4be974bb79227

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d924c56f2e536a8d3c8b209370af5eccda0f2fb15fa5241c1a149b08528c8e2a
MD5 6047a01504a5692589bc5ca0bfcc9f4d
BLAKE2b-256 e93ee3ba8a4c7ff5fd0f75f6dd920936f819e67b263bb573ac40f710406aa093

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d493f1b247403b009fb5f6a03e52cd85eddb997bf98e6ed391a13de15348a818
MD5 35a7c7494f9f8ecbed688155109f550d
BLAKE2b-256 bd621472c0eabdfe5cc164c60de9b6b0e46f1f93665e262d9aa4fc0689a8a30d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e394ace15ae5fd622fdf6c3d01833b7867fe3130fd424438db58942e094d63fd
MD5 5eb5ff79d4e3cf351552d10a7c1b53d9
BLAKE2b-256 4fab5db3e198539b5b82e900e26343f1c2be53ee4db5d55ed59593e7b769ae9e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 bd403806ca3be71f816bc8a9ac86ffce066e19e6bda1c82b57ab6925203ee615
MD5 da748a2668d3ea9a39e23eec283b8b3c
BLAKE2b-256 63527cf524a3b4160da9193cfe967ac5c3273ff3d73e1f081f5fc2f660fd4a3b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 796efde2cddb8769ef8bde70916664f2ffda774f3eb1144eab4abaa552f298c5
MD5 99872dc9e078cd3eeb9badd19cdbc9f1
BLAKE2b-256 c7cd55e0b32153e42af8f0b356f005bc005956d8f481770f9b98b1c48fe866cd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 49f09cf43eb615eb73810f6e05ed3a7d2f8aae339c65f7a385e4ac1c7ae76035
MD5 a17466be99c35c543fa0cfd81e1858cd
BLAKE2b-256 5961401938f52d8a268ddf0e69d229d92e4fd1a4843cea6775d7a8741695c71e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 316e608beb9462e778398bb7ca642ef1c878271c06ff181675b33094d9d4c68f
MD5 f61913f4f1feae4ecdb4ecc03b894939
BLAKE2b-256 c468bef81287a1005ca7e909765746c992a6eedb15d53387c5b8e53fb361bcde

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 906ed4b7ab56ccf6102ae5ca9ee3eac3e9efa93555e01c8c4a879166a29d2fee
MD5 4af9f609b25a43ff50237fb0df426bc0
BLAKE2b-256 d48dae91afee35b79e8101faed4a5ec64a84252de63486c39b23f5949b1e6f42

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