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. 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):

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.base, 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__.

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.2.4.tar.gz (24.9 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.2.4-cp314-cp314t-win_amd64.whl (83.8 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.2.4-cp314-cp314t-win32.whl (68.0 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.2.4-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.2.4-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.2.4-cp314-cp314t-macosx_11_0_arm64.whl (79.4 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.2.4-cp314-cp314-win_amd64.whl (81.7 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.2.4-cp314-cp314-win32.whl (66.6 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.2.4-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.2.4-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.2.4-cp314-cp314-macosx_11_0_arm64.whl (77.9 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.2.4-cp313-cp313t-win_amd64.whl (81.5 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.2.4-cp313-cp313t-win32.whl (66.1 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.2.4-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.2.4-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.2.4-cp313-cp313t-macosx_11_0_arm64.whl (79.4 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.2.4-cp313-cp313-win_amd64.whl (79.7 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.2.4-cp313-cp313-win32.whl (64.7 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.2.4-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.2.4-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.2.4-cp313-cp313-macosx_11_0_arm64.whl (77.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.2.4-cp312-cp312-win_amd64.whl (79.7 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.2.4-cp312-cp312-win32.whl (64.7 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.2.4-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.2.4-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.2.4-cp312-cp312-macosx_11_0_arm64.whl (77.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.2.4-cp311-cp311-win_amd64.whl (79.5 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.2.4-cp311-cp311-win32.whl (64.6 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.2.4-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.2.4-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.2.4-cp311-cp311-macosx_11_0_arm64.whl (77.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.2.4-cp310-cp310-win_amd64.whl (79.4 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.2.4-cp310-cp310-win32.whl (64.6 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.2.4-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.2.4-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.2.4-cp310-cp310-macosx_11_0_arm64.whl (77.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-1.2.4.tar.gz
  • Upload date:
  • Size: 24.9 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.2.4.tar.gz
Algorithm Hash digest
SHA256 2eb64ea2823ce7a90b2f9bd2f40b8a77938e15dc5bba1e7bcc05a60da9ed856b
MD5 6edd2029cbff517d1059ead2aac96909
BLAKE2b-256 3fe75b0d959f3b96ceb45866743c2123eb3c55de024492977592fafe1777b7e3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 af98d8c566e32a5b12adf3d68d5e46e0f2cf3074c498361552e5ee4d44f98ee5
MD5 eb091e935a860c2b115b346545ce80c4
BLAKE2b-256 189fd47520cecf1d36be837970d1baba59e9024ad04b8beafd9632f1c7bb7a66

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 89556850014a5e1e46e4a35a38b50bd0921fa4656ccfaca43269c6dfa586f829
MD5 ac63323352d95067a1d3961cd6d8c22d
BLAKE2b-256 d5f487f1c7d7203011b78b4c55b69c69bb0f3dd1ffbdb0297c4a0004f6c400ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 dcf8be2ac9964ec6c4b851997242d14e455fba481ef7a0be542dd51e85a43ea1
MD5 1cf2fd7a022bbe83d7a78dba3e40d4e4
BLAKE2b-256 2a6eb109e4de3493813161a318c8f85ac3b9f934a53e23afe4bc22a80ca45571

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 23d8d237fcaa741b787e7c16a6932051cbd58d6748e575eafe4550a411628218
MD5 63d0748514cff7868a1446aa249d2733
BLAKE2b-256 adbb57fbee54b9444800a3da4b41aef9a875580d4f23344b32059ae2a4178315

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cdaf2f8cb46c6c252a6c6bb3f949179721655eafd35b58f883d90c44a311ef67
MD5 f7fd68b0b17a345f7123fce2f75beb01
BLAKE2b-256 b89d05b94a22eea84afcc123a2c0c517798d9689de0190858ccea18f5f8d8768

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 b2f93fdfd3a9125578c43180322263c3eb6f6aa2272ad78c16fe3e851f12615b
MD5 bb2eb565d95dd166bbb820a1c01c59af
BLAKE2b-256 7973b83a906482bd050e3a4f9307d9a71035901069be5d19f22e78b907981594

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 f1784e2a45d81e854ec3bf22ef30253bcc428a6161746ebf37b6863eaf5a8363
MD5 ae9a519acd1d1623f77c3b3c5a3be8ea
BLAKE2b-256 438360241b7a284482715726954c43e410cbadf7837c3a6e6c49a11bb9f53976

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d02956e2235941a3242de929280a82378dbd3163e01a0464f87a6607bd4e6aaa
MD5 f67afaf16590891313e8fe0e0a4deb19
BLAKE2b-256 60699e5234245ecea6126b31f105333b082612c2c4518b466847a98f104998c8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 db895022ecec0f4321e73fd6905989c46bdf38924819bae51d8fd030a269e44b
MD5 dd1dafc4f15dc8df343b5f72a13f2dd8
BLAKE2b-256 14841743d95c42f2f7b61ad78dcea0dd159027c66530a20eb265c740a4aece02

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b2b97f196899d475dbe70f965c4e38a1e1423bf2f32ea9a649545763e619898b
MD5 debf5d22d41a41ee35be006710b51e4a
BLAKE2b-256 3fd6b50ed023f3c450478eee128ce2bce207f1a7a31fbe816ff40a283791c214

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 893b06ab4ba645a4992bb089087bdb7914a735bbcc92b14b5c235fd55fa007f7
MD5 937275936c8b5661e45f8c44e558995f
BLAKE2b-256 5dc719ed05728861e8179361550a5d9ec44a0a5e7201f063d3725364fee45cb5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 00c6abe0703c9a8857af7867e44242e7fd49590e85beb0b5d4b44f3e81606518
MD5 4f6f26f75cd0ced52945936b81985373
BLAKE2b-256 dfc994e1d5767a9e743dd55e9f1465b8e58fb6d9bc59371e97c6eb2d815f234b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0b0e544088f3bb142e59f027b70a37c98d87d91d1fa994e5dca7af7aa43480d0
MD5 5fef4994ea7f1b7dcf14bab8fde6a05b
BLAKE2b-256 c790a11e7179079b2b924a639f849073f1cec12b0bdfb2579df6d4b2188aa0f7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4528068e67477f546930cdb00df0e4e5e1bef933064ed3cdae415ea4cb74b5c4
MD5 033681722a998047bb6a5fb78b60b660
BLAKE2b-256 7e20ecf0b6d7520ff131800e1af6c0499235d9a7898119d48165547c8a248103

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ac2fe5a392109752659668cb1d840ff3602cb1c7989e2ea93588e8b76220df37
MD5 106e3a36e5259d39af65a65dbb7d9b53
BLAKE2b-256 0c6250ee9fea74b415cbf53aed718c22cb351ef92bc0f5ed61c71f0a2b98fae6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c0f6ad80e6358952849b12b1f93ea53bfbb37b5b06d55eb9d57e018c0e1495c5
MD5 d941e7478667547cccbdb1836afbc174
BLAKE2b-256 ace2f9c0853e1ab4f7495ddb8798d99a5c7ef3caf6e672a8aab706a20a769e20

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 7af6af027ea331a669e73c8496ccbcb57407b0f79d3bde7c1e4bed73068e5c55
MD5 1954b3f401433733e051bff1126f16d6
BLAKE2b-256 63f52a7adfb332f60b232b31b4e10a645cf521fc77b9105c47fa2cd0e1b6d34e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 bab49d4d3475fe8742d24717fe00965212845c759f0ff62964bdb43ca3f90c39
MD5 d663b02192079b7b5bd216e43dff0cfa
BLAKE2b-256 2e744d98f66fbfc4ee2b06495d64d255323738c68715c807a31253b5cd2d4a86

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 aafdb0fbdc76b9de5db6ce9a972cae0be6a3aa01e4c7e648a4c2814831cb8e54
MD5 4c1373ce9939cfcaf21e49b8e140030e
BLAKE2b-256 0fe4dccc6e2ce2400e92875a6f939053d398213f1355a7aa3466ef88f656ef2d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5ff38f858d951792a2d89b5f41a11c198b8ecc3487be789e546a6896ec13e827
MD5 8663fcce7f90a10186f8449d0e68829e
BLAKE2b-256 df16bcc37cfa57dbf1746fb1aefb64d986b0cf73d87d160d792097f4a6e1ebc4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 05fae14dd6379f0fc7169946817f609640690b4d31e0fda44a275ee43f777e66
MD5 73befd77ae21f09eee4b82e796c4e7c0
BLAKE2b-256 a9047bb86d10d3d6c49bdbc07a58ff53952b9674e810589ba1791dc6b5a2508b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 efbe5a3b97b98db35a70aad879dbb471769ecfa30455efe13660a619cfc71a0f
MD5 72f0058a80190b0b46cbae156646ae99
BLAKE2b-256 5f26b18ab83d5fbc3f4887c45074558f0a4a35879f34292e7e1c38027ee07f87

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7834287894fa2887465e5a7938fadd2fb0d3acaad5147a59e45b7c593c744d81
MD5 946ed0ce1236c75f4fa6bf4b1a52c010
BLAKE2b-256 8006b65828f6f8b001dd5a74dca1f4d75a871319ac6f24e8d3b7389639782814

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 270a0dabf2970bc469a9e553c4ca738e0d66fa9cb8cbaaaf36b96f5f1a31b62d
MD5 09b55f19ec26b96fdfc33dd9fea569af
BLAKE2b-256 7f3804be338795c006321786959a3c37c63e698bb3312ae2c71745c73f0b1b3d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f99db2824439ad374c4c33a6dd3359873a228fb7e8036926f8341e9b7a969b2f
MD5 a3438c9827abaf8f199c338cf82bc36b
BLAKE2b-256 2a49058c5f31deec3f46696d9b213d1caccd36525ff19bafee43638e6d54e507

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 bd164fa8cd981fdb2363ce28d284ce18047a53c9a78927b8833276f9491015fe
MD5 96ec8dfc6e8fc3205db0df22af721a6a
BLAKE2b-256 34909110dff6611258a228c2aacbde763aecf7c5353d782b5eee49b2a8f9f8c6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 1262af2df319c65287083d6cc1bff9e6ff7b08f68aaa7a18d163aab649cf08f9
MD5 cc4dc016630b03297a65dddc545afced
BLAKE2b-256 9b035c66fe07b56a8a14d097e670afd587d152260f9877318e562629d90f8e99

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6ad9ec174093607692992ccd31d2c844db9c092e63eccd1909fb7ecb50e27da6
MD5 37bffe524f5916e65f8ff29df7309be2
BLAKE2b-256 2262115d6915ee8f631c579d6bac49b4dd19372995c9167381ad7b8822e7b5d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3d6b6b75d2e93261eea1bef0c4068ca6874a015c5589b1668605f604ba6e88f0
MD5 36b25573eb0aaa19cb9afb9883b64a03
BLAKE2b-256 1b764613e57f02e148e2a06b4c39ddef32c0118e99c3457fb5aed138acc97adb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2ba2f665a4705c5e733cd7287434d6f9be0fc613ea3e52f7cb026755be1bf32e
MD5 01e3c37b0849970abfd5317336bd858a
BLAKE2b-256 54118287d013a3a0948fb8ae15b4feb7620929339fd6dfe3633ae9de7b31ff84

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 6a226e5b0cc4e709f12f3e704111f3d7b9672c99d41423bc136c74d0b6fa909f
MD5 8a805b96ea7af29c4a278fa6223b18e0
BLAKE2b-256 9a7c4a4398cc65ee63ecfaf80c0324752e4b4a92b59931e7061b86f20cfa17e2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 a885d0fa4cbd50ade44586b3ca2d443b9855fc8ac92936586c862d7bde85319d
MD5 ba4bfdf0371f8e807df32ade440a5264
BLAKE2b-256 953c5cddd190800dcdc0a323fcbd9065869fed2769723c2ac5af03990df86893

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c8e6e118726a2cb9f7e47d0d4e61c4334f3dfed4d2adb466af24501a83fa08a2
MD5 5e312cf5d69748b5d27f741c71b312be
BLAKE2b-256 248f58a96d627a78056bf4eb9911ea6de8bb90f1f707e1cb3ddae64ebf883c95

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e9b7d30800a5284fa19d9101487d3db2e2a95f9ba378c631c2bda49bc2a87693
MD5 2cf266fee87e399e0fb23add73318b14
BLAKE2b-256 799f2bce34e67a4c2c809593b4e2258c38c3c3ab7449b47257be94092c93f518

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 574c0c5aa26ead0f42a67af785905ee7faf1fcb4da264f622cd3bb591a614812
MD5 01b3a7ba7ce81c9b6a93228b96b56040
BLAKE2b-256 02fe4b4eaaf40f7a03c1edca5638e8127347873f522958596be436deed9988f3

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