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.0.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.0-cp314-cp314t-win_amd64.whl (86.6 kB view details)

Uploaded CPython 3.14tWindows x86-64

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

Uploaded CPython 3.14tWindows x86

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

Uploaded CPython 3.14tmacOS 11.0+ ARM64

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

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.3.0-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.0-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.0-cp314-cp314-macosx_11_0_arm64.whl (80.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.3.0-cp313-cp313t-win32.whl (68.5 kB view details)

Uploaded CPython 3.13tWindows x86

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

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.3.0-cp313-cp313-win_amd64.whl (82.5 kB view details)

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.3.0-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.0-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.0-cp313-cp313-macosx_11_0_arm64.whl (80.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.3.0-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.0-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.0-cp312-cp312-macosx_11_0_arm64.whl (80.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.3.0-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.0-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.0-cp311-cp311-macosx_11_0_arm64.whl (80.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.3.0-cp310-cp310-win32.whl (67.0 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.3.0-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.0-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.0-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.0.tar.gz.

File metadata

  • Download URL: private_attribute_cpp-1.3.0.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.0.tar.gz
Algorithm Hash digest
SHA256 3b353bb7d6f25d715c059ec94fbe8c241e4f33363a00a912f90d4cb18ac74c03
MD5 5a3dd38a3cb03b8f76127cf8d838691e
BLAKE2b-256 f5841fa9ab4bd3f49dfa6eb6bca911b530dd9b8084eaea1bcb6adc3a211899d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 9c67d1fc0c771cc3175c28c6b7b77c730809a923a3a2331ab69fc66a6ed8ec15
MD5 58265e445df6f135308b71c3bef71e62
BLAKE2b-256 3803b465e424e464e34aa0830075f95db003e09a376bddb89cd7a0a7eaea93bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 91bca68fcfc10b341e88ffa94dd787a77c6d5316d36d83ba94ece0bee98905b4
MD5 3720456b9213f3f2ab6b56ebacc34e0a
BLAKE2b-256 f03b8330d2c5f73e23ecec09647157674f57e26231126ed97ec3524d781e21a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 04cf58c636e929ac5bffd9a1271fa8d5a70f699f9b53cd1abd20d9186c7439ee
MD5 1a8d380d080befcf9c05f5f9e76b6d81
BLAKE2b-256 b7c3d311e2de49ac8f15cb2fef891b98b335629382d4456ef93d4fbbbe5ba653

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 47678280ec759f3baf4ab203df85ad0c2397979ed6b6eeff211314d309dfc150
MD5 0a7ce8a5e240d8476c3ec51b87dc9ebb
BLAKE2b-256 23dbcaa1c2136de53dcf03b6d7bd94eba8477402d86b24cdeb71a24a051344ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5d0220e5014564dbf4155bccbe9bc14f2386e95a352e18cadf5266ca962f56a8
MD5 afc2f9a8e03824591a0a3e0cee74ce60
BLAKE2b-256 21a2927425fada186390f6ee16bc32d7459523c670ff5255b3c4b7da6ee9d09c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 8e462d0c23bc024a1bcb94d7105c4b9068fae95f01b36ca161b84a2aa39dc245
MD5 5d3e86122a41f62b5723311b9cef36c9
BLAKE2b-256 d5d7592cc1633a00d7df3a945215ae16a6128d021b4ca3398dbe9a777b2f75a7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 da159d494b7f971c8ed29d50e6e518254b2ca4b50f4c272a13c6b1def33a142e
MD5 68063945496790544cadddf78af1905c
BLAKE2b-256 1c036f4406b6571f41013eee50db03cbf06fe64e0349714e2157f1b7732da5d0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e46eb3be0655beab97abca8776d729d69336c476d9adf3402972c6785fcb6f20
MD5 9c942f0196d1e40d1c552b06b8820537
BLAKE2b-256 4b692627772b799a1a8961bbf2a183378c2ba65772d2197d3b5202616bb41d68

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e7cd63625a75c9318fcebc831f41c69fda9ff18a35b38c97494108ace7523725
MD5 86566965d792723c22fe5cee2e62c9eb
BLAKE2b-256 cc40fe7423a15fd6398622b37908d5a27cb7f58f64f6adbf2f729e17d496b60b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 41b400063403656d48944ff0e9260f8972edd8887d54973b58e69e229b061b3d
MD5 3afc295a6548ad2595c1f31d2ce4528a
BLAKE2b-256 5fc3a6c371f00c29b4c04bd9c1ed2738e9482d0c36a53cdb6acf8689c785ce6c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 a7d65449cbe2b24df68a51e211c70b0051d652e1923636a93fb18f05b272b1f4
MD5 8f55b10aebe5ca6a5c2f18f2c81962d2
BLAKE2b-256 a80282421ae3b724d92c5a99458c375e8bcfc31b10349bbd1e9c6d71dcd387f7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 d5475e7c1d5e02b73c5d90260bb47874c45dc61c5acc99257b64afbabee9d671
MD5 0fc2f0097b06900a35aaa43e9ee669bb
BLAKE2b-256 826f2235625865fe7af0ecbaca42b8c1178562a419528c3814a7add553672d3f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d8b697bd41e3d60ef7258e73b1535fed5171dc6d176ef7b8b241ebaf49b34e75
MD5 f7e3d7551bd6ea241fb62c82af7558af
BLAKE2b-256 36adf1aa324c67f901f14eabdd47ccb24eadc07c2da9c6c60627781018b36cb9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fb8cb77dd518c7d42273ebe3026c242ba1fb933949e66b97eede979d122f2380
MD5 0882e30c8df6f1b1ab7ba043f0acba35
BLAKE2b-256 04a2ceeacb5d3c4f98cc64b4f7d1f8343b4b3b7928b8802d3e3908589a95493d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b12068d23dd3a98b873d5ca31ee784e74805e2b991269d8e4c516077637ab2b4
MD5 1c714341750c65271354afde0d9108b3
BLAKE2b-256 2116d6a811f05fb70d31c22191ba03d5c5f47a07c177a33e2c916f21fad54999

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 3fe08bab5df9932c6689d23f0a96392a0f3e75f7b522ff25a7078816387a3097
MD5 ba11dc5e9666a0cd0fb2339d6b8bed64
BLAKE2b-256 ef5e791014c2d6d4da0689220be9abce20b44b90dc437312bcebe6d5c6215e3e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 c3876e52060945c28e0a3129f3924e29e7f6f129e87347f4331f70edefac603c
MD5 edb08bba244a0a59597b64883f65671f
BLAKE2b-256 b0b82306e63da3c1a3357f91fc0f99a1727df7257ab1014d442bfc6ea769b345

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a13a8e0c3bb0066d1468fbda7d84c6df4d165255e89b41eccf316501915e799e
MD5 a25e37951be18b8fe151f15803da96a2
BLAKE2b-256 0551c9e6120e10a739376a0908e902a53ea32a90bbcf3c82c0ffa2f650af1108

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 30fba32bde3e70081744f490fb629f1a0836cb8e35b4901ccf984a4dec46ee75
MD5 41cf605bdeecdbb01c5eb5041f9066ff
BLAKE2b-256 ec4449bd8b8dce897aabd7a6afeddf6df32a11de88c896eb8c7c301ca6c9b12b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b399c8ec5be751590543e8f9fda10131fcc215f9246e144d590951e5a721965d
MD5 ce71aac10a056c1bda67c4c032515417
BLAKE2b-256 d670577c2ecf25fa171e4160074e1092487414d8986c95b95b9f2b8fc6553d37

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4e977de4e985850e522d1207132da22ce1395079208db028d154771c17b9b43b
MD5 f865f3eae7423898c4204d9a9c4ac8f7
BLAKE2b-256 42d8f24df6aec1a5326ba34be5aab3efa96686be39d802473786ff8892014072

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 a0ef59be8d8d38eae577698691be0109c9b37e8679a57bdcea904fe65a8969eb
MD5 70bf8fed8af016892fd5a670b7f006a4
BLAKE2b-256 ab57ad2f3f3479f32e1cae9e0332977aa47b8d51a34a1e3650e96cd772021474

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b767ed8646e0238749778c15aec23cf01ee5bff84c82a8bac1507a75a4a22af1
MD5 daea02c2a0269b114620b580d0324b56
BLAKE2b-256 61cecf4be12bb4edce5e66939821bc95bcd50c3a7f8313c83ef52366379df88b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 77bf71f46ebf93d4075cfa16d1b8a1b2e14fdb93d40f6446fe4a5680236cdc37
MD5 e4b88d8cefc9cc1f7c857f88af81c182
BLAKE2b-256 50ad1ba1a2a0ceb4126fa6bfb3878ba59bfdf161e746941358cfa9c8a00f530a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5f4deda0f2a08e51cb3cd75f7cffaf3cc66846c46e2e4a5b3232f9ebb9acd6c6
MD5 7f8003702fed54b9bbde1410e7a6f448
BLAKE2b-256 56780d15bd760aa769124d9dce319975bc3f2fe79b248620177dbb5e9d12ca38

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 89c0a4ded948845623c0dd167509c1b970c6428d73f8b2e111661a5cf53cff69
MD5 d270250bf9bc8a48eab190567addfbff
BLAKE2b-256 21719db3037514e1f1a5d354bad3549707213475de2452de70c0f100fe40833c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 6603d024d606bd0e760e965d8acaa71b8ceea08fa15254c21600ea7e52972d36
MD5 11324087ea773a67a5bd8ac95e0d0bff
BLAKE2b-256 a0ba8822ce09e891d0b5e43e5e2e254b93f135b17e8c0cc3b2e8cc6d9682048f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 95e8888d9055f3ad8d5c60683c15f01a5a1eb9c9c8049f9e1bb75672ab6bf3d2
MD5 08a005d85efffb431aa6dd76609659d9
BLAKE2b-256 06c7b895802eb364e52e1e723614cccd8075aca8febc18a9adf3d07db993eaf0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9cdc22ad3b9fdbedcaf46fbbeb9ccb6484a7f08f948fe848aff03864cf166da5
MD5 46c98341ce6679061b62298a7d186600
BLAKE2b-256 5cbc8b18fabaaf9b742aa8fdab3056b7aeef0f5b2f474f85ded58711119f803b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c141782317c313020daef0310cbfd56dec0f4e84874f5c749d6125be82b90908
MD5 fcaccc5810e14b0794bf1eae4cca6273
BLAKE2b-256 b4e7a789ebac71f6d55cf3b92d20033403cf808de719fc2156c8c2d7d15cd7f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c21ea62a8131fdd983fb7cd30acebc2bd9d949b058bff2023c1622d023098dbb
MD5 06092b321d96a542bcabd45689bc49b3
BLAKE2b-256 5e4da2066266cbf2b4a4f6109af00d5c7c5554b0570ca85fb6b603ac8f5beb78

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 62c6a0ad0eedc4cac369037157b4579b3d40f455e1320ae5f448e97447d360c7
MD5 cf148bd1221085a0245a88d258d8928b
BLAKE2b-256 a88e101178c99fdad4446c54e48eddc9b0c62e36b1602179186ed403bb9cbd2b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b523652e09e5c4b78968d9c811f143be7f0f502ed422e53d0a4adf7257d30896
MD5 ef599d271a5a733a180fa48bd46fdbd0
BLAKE2b-256 7f791d6ceadf5bb7253d44b9b748b19d2f3b52387201855a3a0c911c84f02ebd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8be41ce00b5460c712a41fb91c5aabfecfdc3ab8831cde2377c143e7ef4b3ecd
MD5 6281cbc5fe23f02573a06a596d8c4acd
BLAKE2b-256 4258423e484af6e576355bc811487a920400fe030b0a896d57dd0620f1d3937c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1119d657880a1cf66d558d8d28fdcd28467db9ea2b62177d179a72f07c37665e
MD5 fcb64cff0707ba293a2361e5aff9ad03
BLAKE2b-256 1e55be2b0f0cf7acacbabe8581a5039dba24e122fa1fb1bd376a994918bbf17f

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