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__.
  • 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.6.tar.gz (31.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.4.6-cp314-cp314t-win_amd64.whl (92.7 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.4.6-cp314-cp314t-win32.whl (76.5 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.4.6-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.6-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.6-cp314-cp314t-macosx_11_0_arm64.whl (89.1 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.4.6-cp314-cp314-win_amd64.whl (90.5 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.4.6-cp314-cp314-win32.whl (74.9 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.4.6-cp314-cp314-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.4.6-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.3 MB view details)

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

private_attribute_cpp-1.4.6-cp314-cp314-macosx_11_0_arm64.whl (87.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.4.6-cp313-cp313t-win_amd64.whl (90.7 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.4.6-cp313-cp313t-win32.whl (74.9 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.4.6-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.6-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.6-cp313-cp313t-macosx_11_0_arm64.whl (89.0 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.4.6-cp313-cp313-win_amd64.whl (88.6 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.4.6-cp313-cp313-win32.whl (73.2 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.4.6-cp313-cp313-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.4.6-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.3 MB view details)

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

private_attribute_cpp-1.4.6-cp313-cp313-macosx_11_0_arm64.whl (87.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.4.6-cp312-cp312-win_amd64.whl (88.9 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.4.6-cp312-cp312-win32.whl (73.6 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.4.6-cp312-cp312-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.4.6-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.3 MB view details)

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

private_attribute_cpp-1.4.6-cp312-cp312-macosx_11_0_arm64.whl (87.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.4.6-cp311-cp311-win_amd64.whl (88.7 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.4.6-cp311-cp311-win32.whl (73.3 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.4.6-cp311-cp311-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.4.6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.3 MB view details)

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

private_attribute_cpp-1.4.6-cp311-cp311-macosx_11_0_arm64.whl (87.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.4.6-cp310-cp310-win_amd64.whl (88.7 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.4.6-cp310-cp310-win32.whl (73.3 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.4.6-cp310-cp310-musllinux_1_2_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.4.6-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.3 MB view details)

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

private_attribute_cpp-1.4.6-cp310-cp310-macosx_11_0_arm64.whl (87.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-1.4.6.tar.gz
  • Upload date:
  • Size: 31.9 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.6.tar.gz
Algorithm Hash digest
SHA256 8597b62cd7874d78a32093aaddc12bc724331de805da1e01c79eb249bafd6fa4
MD5 09466d167eeaa2c70d435fa68ec1bcf2
BLAKE2b-256 abd36ef857cb0e56baf4e93558bc52fd5c2d5f782ca5718e26d264b0aa9943d6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 1c8cad8122de4fe3e69676f34c0fe1aa1bf4f56631e678ecfe104cefc0e71de4
MD5 a77499ba764fde38800c8f0c9bfd735b
BLAKE2b-256 6d27f833b996f062e9e8c22563493e592d75365e62c2f7bd0d21489074f195b2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 22b57451d309626e60f24f52927f894448182984deeedcb4dbaf8e1face8c9ce
MD5 5fd4060794b51e42f7402939c9878892
BLAKE2b-256 32ee01e45bc211f7ad52e86fbefe81e7efb5692714d4c342aa452f1f4ffff8e3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 666e6787474e26d75c3545b37f98a5d8acf8ba07182f87c372d265c19d7b1a84
MD5 5e1166366c17f87b125ce498c467d169
BLAKE2b-256 c6c1c31ce27de0131e3031552f021e8e8ec6c650a60908c91ceeae9b986da9d6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5b84d8d287ea56c2ca54e829d76dff5b938d68bf1f0cb7ed438004f540d853eb
MD5 148fa798b953a32692f7d3f39787583d
BLAKE2b-256 6ed855955b46c5a3498b80574c7b0f890e24b5ca5a8e661f01ec0eff5c6ee4f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e664305ab2708a006c1b24de9b14a14b8fd36c7f7716d9d4e9e7fcd7ce6512f1
MD5 5f56cc4ed9069c9805412d1250c10564
BLAKE2b-256 54a26b150a0d0d31b5f74db9a2a7affc7011b05ff85a9a37ab11e95cf8e74a04

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 32f1d0c901a9c9459fc8f3567b078066c317daedd6e5b6309d046d986cb0a6bd
MD5 f3d86a481946872b649c339e23b4a9f5
BLAKE2b-256 c33c0a9acdd83733a4d2b2f7bc7bf9eae8d89e1c68ddab00a7b9d44db922ebc6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 047154932ac6de232c94dded16b78def31a6047b006da3c9554c4883ec696b0b
MD5 2fc00fcfbf8946fd41ef7d81e601a9c1
BLAKE2b-256 d9b86c9c999064a933cb8a73d9ff6415511abf6e1d98efd390c72bdd6765406d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d5f2485ed58c63dfe1cdec7d877b6e273035ac5652927444a7ac5006fde9e1da
MD5 8d340c14c84ea1cccbdbeebeabab4058
BLAKE2b-256 05de608a99fad101a0a77a531df1ada4df5b32248d32b4db65d39993594610b6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 358a9e225de4c12931038434806eb1d4a9a6959fca4337d600a7ec17d741012b
MD5 e88dfba923487e41d833cb9719027727
BLAKE2b-256 9648c573d53a172a14e21414671ecee210af27914daf51fc9a1cebc9607ab52a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8a100845a79eb4672eeb3cd5967c1f6832903e36fc4709b278e978878e4f4e59
MD5 e537fe9e442f0815dbde9b3dd3516e45
BLAKE2b-256 056fcf9fdbf1626af4120c2ca30034d09fad09392592769120ca5851468f80b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 0c0742923567e242ace3280e0c726019ad45b9bdcd89d2ef58ef0e5ee0fdc073
MD5 73c03317414f5e0ea39c28513bd759ef
BLAKE2b-256 71082980eb167fdd8066185f00439b21b1e438581a3fa1db422b24ed0641d4b4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 4bccd09cf5b0d1025f1f4ef6304818ecef5e19d3434d8baa6a0f9b02ed23ef2d
MD5 3a638f35f90f44fce4d9c54a1c75fbfa
BLAKE2b-256 cecd786df0d69505b8acefe91aad42aea682c51ba06eb41a9158604250a9ebbd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2200d9eef8b82d3341b5b344110b44c72749b5441c6e92a2b94332febefe1557
MD5 711bf7c9fbb3f16c2f530133d81b75e3
BLAKE2b-256 4934a5358adf0d0e6430aa2c9848359fc614a8fd0d0c8303d3b07fd7038116f5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 855d18b358043f2f36e8e00437bc1ef78cbee9e8c982b6040c08fde4c54e142f
MD5 2351fe3320b3ce0f854692c345ce5573
BLAKE2b-256 184d843a0ec8476a3dc7a260edff8c0151cbb0d6e8fb24604e5c3c478401fa53

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5de901c09d0b7ee589149fdb3ecae58e8c1e1dc609a85daa99c3c357ba426abb
MD5 660e71a7f542a2390a2eccb888787a7a
BLAKE2b-256 c6e11fad9714b48844691f376c981ba1a45abfe32d3c6cf91db6e987858b3bf8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 9009accf17ec9e50694a81287a3afba060f05622ab50096ad85d135d9b666ae6
MD5 28937af05868424aecda1d4883d1fe9e
BLAKE2b-256 dc3c2d88b862cbff3d55a3b7571edf950957fc5fb5b8273492fb9055db44cda9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 08cbfb93c46a2cba4a652ec4cc2e499ef40bc78672d86a5c4e07110e043fbc5b
MD5 5605f70d234bc12525b4a8bda59e13d2
BLAKE2b-256 e47505613929476817de68e3db3dc1e846e28ce1e41afd56ed5a4c71221847b7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4345b68bba2537917507c2a57067f6e3ffb8dd6c8eabf29aa17a5490b3d8752a
MD5 413b0518f54bcdbad287e8b6d1f34248
BLAKE2b-256 f865fe141894b0fed17a62f6ee2f454c1c0563664e261cfaaa624bfbfcb26b52

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4f8fa6a7063af1423694d9df9a8ff624995cb82057ae7bf35d74e345bce9a9d6
MD5 226015144d26acfdee905e5b1cf0218c
BLAKE2b-256 b7c88ab35c2aa95c08891a03374520e1fbc1c771e703bb8e2bc14ba7e6c7d149

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b4b11e04f5b73f5bcd4e07fabda64d7bea62591767040e8086474ded2b28012b
MD5 5924dc17ea89e7eb62cba11bb4981397
BLAKE2b-256 eaf15c808a3ec922ca2b3c58f070bc9d7fa76a712b943f3b15a7914eddae8319

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 93445abd3093d763a4c75e4608a85bd000c8521a55244a0b2140bef3bf81b3cf
MD5 ccbb111031ed97ba9f52e998d608539b
BLAKE2b-256 54de5bace70bb7562971702eed8e29b99f09f56733c326cafedf1a8cea9b02bb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 985974cf46acb105d3e358e72d145c321f8ceacc5a697475e9be5d089637a092
MD5 9826d047349bcefb1c425b1c98721dc8
BLAKE2b-256 cb424b5c216c0248352414cc0fda9c351ca16aa8e682efdd7021048c9fa1fda5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8e49e18bfec243ee9ebeb88bcebb7c502f54de8989bf7ef0fef821e3daaec169
MD5 51c9415c9e67b3c2c3651ac918027535
BLAKE2b-256 5bec58dc172a99434c4103d0a45b05203494db2702d2f7bf54960206e9fa2b2b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 af7d50e9af0377a1efcd05b42cd4b26cc10dd209474598172c2e7537782863de
MD5 a96cf2b95d2bbd2ef5247616fff5744f
BLAKE2b-256 50cce2d453ff6effc46d0a70e98290ddf2fee9ce9bdba08e658de529f763337d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 54ccfbabdc6a66aead52f72fab775568ac7dc3d84bb201c0e90698394be14486
MD5 fc75e6f771d64b57c9ebd65c22b0d269
BLAKE2b-256 ae566d31efe2d9666ad5a402f1d3bd6cab7bff579d6cea90a41ee934fdc7c7b6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3c2d3c191dc479aff8cc35069fd62d37f634d3cc831a773d5b262dc79349233f
MD5 7f922e2afc60f5be9d24cfe866c92896
BLAKE2b-256 a777f6ca45fd384b4db2b231a1e8df0bac1915cd813a235176639642305e653c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 557f481be97541c8f3d109e30b5fca110fd68d34e2553d72a2e718ef2f27f0a4
MD5 e91c119f42f43260fad255dcd71c6027
BLAKE2b-256 7f90979cc35a01476f8ef3e6cf6da4c9e13f6ef27f8e71480e81b8f05dcc181a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5b488756b8be57b3adef5744abeb3679f29d63d0953c5a25fae32328be4110e4
MD5 8ed7ec40f7a2beb49d0a2ba14bd35be2
BLAKE2b-256 1972c0cba81f792f7a79a57613da092405c49ee102a13d9bec69aca3632c3748

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3794eec6b4001de9ebf37cdbb9cdba86b8d20d1ee17c68758e758705d036ee84
MD5 29ddf5ff978f5aad5bc9297c0d014274
BLAKE2b-256 17ac5bb0f96d1b7dd19238a257057540ca2e2dc51e274e599b932c4563becfaf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6aafa2737af1704c69678a0cd2e3e9f69e15e33b8e49ed5ec0eeb6fb47a5339c
MD5 282ed8ae82f9291ddb259b661c5db31e
BLAKE2b-256 ebb250c8157888960394de5dc6cdd58e1527711adb28482a42162f299894028f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b5dd3bcce161ca41fcac014c33772f58af3e2496462d48ee7498e683a635afd3
MD5 568da4c5ccc14be75ca463b002b63789
BLAKE2b-256 bb0bae60f1e3944a2b1876f9c5f4373a55f198f577664e3b19e51f219fb0b531

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 3b8a246283e4da9eecc1e9fdce855a243b9c48599f2683fe2cfb933593fa2e09
MD5 0d256129080a99bdd2bc19010ac84cda
BLAKE2b-256 513bf90354e9482a8759d8bca53026a4208ca9925afe2840997e3caa5d183a7f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5e8e85b0e35b2fd15a7afad1b8ba3bfe2da72eb6f5805ccfa2fce90ac70df7fb
MD5 abfcb67a00d682e5c56cdcd34bb7d550
BLAKE2b-256 2691339a548311ebeb09c6350c121b16c688be4e1259b9ba40b5a7a7f2991352

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 06954e137e4147b4996ffabed6f46698a3cf0924385d03587abb0890de3f8d2a
MD5 820f55c15105159be304ee856c2c0dd9
BLAKE2b-256 ed59cd8591f959dad0da8c3057ab88e4cb8f5815cb33d678e342b9e03fa39b85

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c4b1bc712ac6fc4f9b113315e87b7437020628a824488a67c76e3218465082ce
MD5 8fa932c24cb0dc73599323dd240af7e8
BLAKE2b-256 9eee04d56ae860c33ea16c7b723318ec53e6f24e18744880488b75585afb3812

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