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.
  • Don't use a decorator which will return the _PrivateWrap in PrivateWrapProxy which will raise TypeError.
  • One class defined in another class cannot use another class's private attribute.
  • One parent class defined an attribute which not in __private_attrs__ or not a PrivateAttrType instance, the child class shouldn't contain the attribute in its __private_attrs__.
  • CPython may change "tp_getattro", "tp_setattro" and so on when you change the attribute "__getattribute__", "__setattr__" and so on. If you are fear about it, you can use ensure_type to reset those tp slots. For the other metaclasses, you can use ensure_metaclass to reset those tp slots. Also, don't set those methods on these classes in your code.
  • private_attribute.register_metaclass must be called with the metaclass which supports weakref.
  • Don't set __static_attributes__ in private attribute class, or it will be removed.

License

MIT

Requirement

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

Support

Now it doesn't support "PyPy".

Project details


Download files

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

Source Distribution

private_attribute_cpp-1.4.11.tar.gz (32.4 kB view details)

Uploaded Source

Built Distributions

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

private_attribute_cpp-1.4.11-cp314-cp314t-win_amd64.whl (90.3 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.4.11-cp314-cp314t-win32.whl (74.2 kB view details)

Uploaded CPython 3.14tWindows x86

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

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

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

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

private_attribute_cpp-1.4.11-cp314-cp314t-macosx_11_0_arm64.whl (83.0 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.4.11-cp314-cp314-win_amd64.whl (87.6 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.4.11-cp314-cp314-win32.whl (72.9 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.4.11-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.4.11-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.4.11-cp314-cp314-macosx_11_0_arm64.whl (81.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.4.11-cp313-cp313t-win_amd64.whl (88.2 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.4.11-cp313-cp313t-win32.whl (72.3 kB view details)

Uploaded CPython 3.13tWindows x86

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

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

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

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

private_attribute_cpp-1.4.11-cp313-cp313t-macosx_11_0_arm64.whl (82.9 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.4.11-cp313-cp313-win_amd64.whl (85.8 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.4.11-cp313-cp313-win32.whl (71.0 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.4.11-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.4.11-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.4.11-cp313-cp313-macosx_11_0_arm64.whl (81.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.4.11-cp312-cp312-win_amd64.whl (86.1 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.4.11-cp312-cp312-win32.whl (71.4 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.4.11-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.4.11-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.4.11-cp312-cp312-macosx_11_0_arm64.whl (82.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.4.11-cp311-cp311-win_amd64.whl (85.9 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.4.11-cp311-cp311-win32.whl (71.1 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.4.11-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.4.11-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.4.11-cp311-cp311-macosx_11_0_arm64.whl (81.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.4.11-cp310-cp310-win_amd64.whl (85.9 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.4.11-cp310-cp310-win32.whl (71.1 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.4.11-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.4.11-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.4.11-cp310-cp310-macosx_11_0_arm64.whl (81.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for private_attribute_cpp-1.4.11.tar.gz
Algorithm Hash digest
SHA256 63d64f758e7d3b15046dcc811f167a8d5f331cf606535204b5fa7ebba8f6e0ff
MD5 2c51f3114d0a863f1d0ef95e20bd4c36
BLAKE2b-256 9a91fded7cc49428c6e8e3bc9cd1082502d7a250c0b87ce7cc1d9ee410ced193

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 54a81a8973e34917023ba044876e28cbb952997dc6b65584f6682f2c00492cc3
MD5 60de3eb0e00da3a4c31d0d4bdad24ea9
BLAKE2b-256 b32157d88f5aceb602ff900890e78f36f87a87ef9da9706d20e25557d7910129

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 cdf88fe7e944f0e0766049f13fab5b0f3856659e52ae84393bb6b319f143749e
MD5 15f616565244f290b775db1695472639
BLAKE2b-256 ee1aa2be956f5f8f48519563f5e10e680490f051a661e6ea788d0fb708668b0d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 14ef679f021e833fedba111e4285af90b0de824d791a4dc095a391a0a906bb63
MD5 1e4f079a096f5bcb8767863adc82cba7
BLAKE2b-256 a35e66c29f7319a11a921fce396a76f7282f67bdb543c0d15debfdc1e5865dda

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d90ad06189bbd5468892fa4140aac5544d75879c6094959b75bf3532b7a521fe
MD5 f923c8c9ba975ac345110bf22a807c96
BLAKE2b-256 4a46688285ff6471c2c13dc66958eb2ecf9498f78ff1f5fbd9f9f28df394c8f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a274f54a1aede88bb492ed05dfcdde38c194ad0f5f76db4d65a468c78de4fd59
MD5 7c4eb6ac2900d134307fa315c6aae105
BLAKE2b-256 14cc8cb684ecc46c374c752574ed5ffe1f110e8e361f4b41ae99441a169a67d8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 e0f5a868985838f78808aee9c84de6f8cf42f120e1ea5279143ef95051561c84
MD5 8e6672747d6db0f5d845c1d9a6604a1c
BLAKE2b-256 dc41b5ac1c9a6ef2e1579dca01e44b95e01e3700b7a43069cc86e6faab73d4ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 41b68133c70e86a39ed38ed8c2b8d2ddebeaceea70d252d70355045d596b594b
MD5 0455718b4debdd7b6324f34f98f34d70
BLAKE2b-256 1aac5f781d9a5c7b89e72e2e1931a322df3719e7a6d9fca4aaea07ee836807f0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 43540fcbe2f738bfa306309d01b03abaa266d6fa5ccc3df6d08a049c0ebcaf7a
MD5 791eeb9f8ee2f30113f8d4df7126b3b7
BLAKE2b-256 f54f466fc41f0371cb403c7cfd879a4855ee06ec57b7990df21767a61f61a70c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0443905507c2d26df03ee1224c8e8eda13009c7723f71581d38f2040938f34e6
MD5 5c84faa1b371d1ed793e1b871c8f4ff6
BLAKE2b-256 413691d7df5148e48522b705ec2064c71eada37801070fbc288ca906483aa22d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 751ba063d75ab98cc03cd3cc1aaa5bdf96ce99151a999a3bec2781d6d184aa89
MD5 178feea0b11e62a7466a93dd1b45a585
BLAKE2b-256 dc9a4ad7df2443646b3549534048cd8bde769efd6994a08c9bd93cf642d96f7c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 e1ccf37dc75f6b2c25b48b5f7053d087b1a21e0c961515df2db27deaf532dd0e
MD5 7985d4933cc5103efd50d494918687f2
BLAKE2b-256 da54715798c8d263651ab40452dbfad81de48c353752fc39617c5380d9dd8e8d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 7bb35e511a9441685c45b9cc32edeaddbde2683cc33842daade9006f0f64e132
MD5 c2a5cb1ff291837614cc9ff8e6593969
BLAKE2b-256 c4e5030a9947259126ce431f849feb5e9e117722ef39bd706a1f53b267d3795b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d6e91dc23eaa58cf53ad3cb7f97feb77ecbe9893d5a9d568ff16bb93ea633cb8
MD5 d66186508c229a49c06aad06c23ffb92
BLAKE2b-256 d3747ca6e44fcd7f90ff1e3acb2e4fefffd24657732fa1ace01025234976dd07

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 097a31e0ba9733d62c6df7845bd7f10ab23a69233f00f96b6d733688c42fe325
MD5 a019da61ee727115e3ed4c138c7d203e
BLAKE2b-256 9cbf92b9eda0ac5c4716e32fba6ccc89a81e064513e876c8b5226541d2e53654

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6f06d1dddab116676dbec7490dc2f4e71e94684225f16a4330cc965fe26ef83d
MD5 bcde50d9afa46d5ac6ffbeda5e20d3de
BLAKE2b-256 8013e1759492bd0aaeaf09ca4aaecd5d920333d08c8c36344d16c68b3487ab1f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 948183a415de9f8d3a8cde8a6e9d9b580082e14082c4b2f1b2ba9f3914566830
MD5 46dc9d7c6805379d517428c6eec7b43a
BLAKE2b-256 0d3810a714e790f04a31be23dc3a4193405ceb3cc754c8cd7be36a18bdf18656

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 b6897537b3fb295f767699aaac81fa7b84d234793d362f3075cbc64606b3354a
MD5 2f2242835402d4b11b4ed5f24b5dc4a3
BLAKE2b-256 655dd0415019ee19cd4434c1c010aaf8f85d192dab66e0cc0d453daf20387565

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 71feb466539adbae23862f4c530c0b8f3a1b51f40138043f621ab5424ee1aeea
MD5 4fa208b813a23551d038dbd8417e7fee
BLAKE2b-256 9a06908c230c10783f819e9e0d3f247d853dd5c4c330dbe3734c8da517588131

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 235adc1864766f7234d6d2df2da26b68cb505a7a4011111d11f5302991124ebb
MD5 d06106462651b005f9535288f72f3c7b
BLAKE2b-256 60a91c9d426369275e77be0bc7577ff4d8792d1ad66e4956a634343270faae04

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c9ccf956cb457cff774e2ea8da0d469de7160ad0f690d4747388066fc4f5bb49
MD5 1c6e2552332333eed1de626553ec7ffe
BLAKE2b-256 0ce64de1ec093882d9fb8d0ceb6ff43c48e420d855b5a5bd99b77896052fcb21

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6e6f1c92d6bf17ccf08234a11f2ecf830d14bb04282ae31c19a53fc810402ab7
MD5 f39afe195c7f44e75705e598d69b1986
BLAKE2b-256 69e1f52952ee7bf8017039c7a90f3aff0b5ebcb58b25c5da4938cd7082f0e644

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 523c61e322234b058255d3f341504aea0dedbfac33967a339471e06dbe24f41f
MD5 54e562b5e55deeb965cee13d3b6ff27f
BLAKE2b-256 ce034f93f579311317a0a2031186da67ea4db4ea44b0284b655fe8874b94bc52

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2e43d52d5440c9b3826f86c989e8afbbbf1f919967e0e159d4b0086ca9646de6
MD5 f80ef703dbd2347b6451f2d08e9abda3
BLAKE2b-256 806a29a99b69fdf8db891f1314d8e6cf641896f30ef5b98d43245548a22978a2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e5c456b19dbee349cd60f31c49b9fa0670d30ea54c5937e25fb1efe60b77221f
MD5 981cbb765a37bc224f717e95e47ceb60
BLAKE2b-256 ff9e4e1742ec962471cd7bd6ef26118f5a4dc37ad47a16a6ce8affc8a121471a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1ba4ea8c7a9e0803177ef2ebeb2344ac639d450a54136bb81191c3641e515658
MD5 ddf390748487a0014e3ecc1b5c49aed2
BLAKE2b-256 d210e4c3c20263a19dd8c299c2eefa9d2be3625812ac75575eb4234885b9c728

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 9b03a2baa56a911c6b16867248f9252f926c8927b25cb9cb305cccb9b54d8561
MD5 cf00b50ca5220fd3d399a64acb78a68e
BLAKE2b-256 945978a1abcbb4c785799ab8bf59609081b46d99cf73028ed2d0e4b0cf44a48e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 1af614c974d4107408f0e93be02452ccc2559979c9f09c095c9bd80c1d4af8cd
MD5 158d721c8761886449b032543907aa75
BLAKE2b-256 afaafdcd1fc9f3be9797e8fec013e905f32c467ce8c30a4a6f7524a8aa5d84f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 266956e761ed569e05e2d24ab16d7e78c2ec84a3e913bdff0fef855718155f00
MD5 c1f8c99204d5bb20a558f586694f284d
BLAKE2b-256 8b3e1a5be02b4d5bc444331ac732cc817c402f6dad2a205bbe64e90e52d8e70c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d840f31e90d97e3451aeb10af310da5b22b7d0dde1cd67fcdff5303529bb0be1
MD5 44479de0d5dedbcbb5a15001b36b1ab1
BLAKE2b-256 00b230ec7c6fff380bcbaa59f92ee2733cb9346472731d8f817c213251e531eb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6753663b5fe3b3246d525f81c6acca26cb4d7095871ee4e7829bedad48ff2ed3
MD5 f9e2375c578c711a393e53746bb8716d
BLAKE2b-256 8f9e01a60f0f7d0c940381667819f63cca1d72405072fb30ef5f84e8e11c7905

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1cb24ffdeb1abbd081b262f22288742ac46f03e664a3fd4e70a9bcef019f5b21
MD5 1f636f7e3dcc4b750eb5dc9fbc4233d0
BLAKE2b-256 748e636b1a4e6c01b94b4499b0fd8502a32a19d3f5e7fc976d38475b773716d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 33d9dd0d3dde3e43c0022dd53783d49236114c5a8a839c62c1122d3b9e17151a
MD5 8c312df5a469468067fc66142e37a37d
BLAKE2b-256 6be4d82fb6c9cbdbee3c512e19ed8805db9c46079ecf0560e8bbfb3d8672fc53

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f4671b472f31e1a944e011c7112340fb9f5f4bf7224a131a2b858493636cc6b2
MD5 b2541c065ca3c3a31622f7d5416b0c69
BLAKE2b-256 5a0e48eb9b2b3d39cae2dcb68beb47e785d6a89bafd05681cdf494087afe0b63

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c76c91386bb3a875c6dbe5d593b501be6af755cfea934ebb3b09b29f67e4340f
MD5 5e4907aa3c1964cb72dfac4e8552a26f
BLAKE2b-256 d31ca55506aeaa799f9e2dea181e3439dc2d0396d4d7a59b9895f9a332a087af

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.11-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7fe73d509a50ce7269b4204bddfe96ff4798860adc2b4b9fb20f489c8f4fce28
MD5 9707d94062272676b09909846820a48d
BLAKE2b-256 9eb7ab2e9a2ea8cf6cf3a9d603e1fe0d7d596195c1ad08f44280926e00d0117c

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