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

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.6.tar.gz (25.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.2.6-cp314-cp314t-win_amd64.whl (85.4 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.2.6-cp314-cp314t-win32.whl (69.4 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.2.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.2.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.2.6-cp314-cp314t-macosx_11_0_arm64.whl (80.9 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.2.6-cp314-cp314-win_amd64.whl (83.4 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.2.6-cp314-cp314-win32.whl (67.9 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.2.6-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.6-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.6-cp314-cp314-macosx_11_0_arm64.whl (79.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.2.6-cp313-cp313t-win_amd64.whl (83.3 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.2.6-cp313-cp313t-win32.whl (67.5 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.2.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.2.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.2.6-cp313-cp313t-macosx_11_0_arm64.whl (80.9 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.2.6-cp313-cp313-win_amd64.whl (81.3 kB view details)

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.2.6-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.6-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.6-cp313-cp313-macosx_11_0_arm64.whl (79.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.2.6-cp312-cp312-win_amd64.whl (81.3 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.2.6-cp312-cp312-win32.whl (66.1 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.2.6-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.6-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.6-cp312-cp312-macosx_11_0_arm64.whl (79.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.2.6-cp311-cp311-win_amd64.whl (81.1 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.2.6-cp311-cp311-win32.whl (65.9 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.2.6-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.6-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.6-cp311-cp311-macosx_11_0_arm64.whl (79.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.2.6-cp310-cp310-win_amd64.whl (81.1 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.2.6-cp310-cp310-win32.whl (65.9 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.2.6-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.6-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.6-cp310-cp310-macosx_11_0_arm64.whl (79.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-1.2.6.tar.gz
  • Upload date:
  • Size: 25.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.2.6.tar.gz
Algorithm Hash digest
SHA256 a7dd3145dd630598ba98c2d3a62651e83ba78abb859760e965fc8269424b47d9
MD5 bfa1db0404b1ff1d2febcf6da7079542
BLAKE2b-256 f9fe101573e81de55cb2e20c2f09825e70733c8e223a99ab072f8d9c3ecde14e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 46240e5445cc88951e23bff37e9a66afd4e6149f75ee75f09a5e805c43283ae5
MD5 0389b7209ed2ffd10492204f3c537fb0
BLAKE2b-256 26ec209c1686529199a4170a46964c5249a791ede1516b362b2acbefc966397b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 7d0632e61e93f5d6ce297508df46d2496f1bdfb119dc2f97784ef96721d9aba7
MD5 7a466733d17780f0f565fcf1661d623b
BLAKE2b-256 f6aea29540c8c794a6eb25f397e97bfd981e2c8b9fb05bee686aa353427b79a4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 eb63d36423122f177c3b89a1bf0b1f433a6d84ec4e5dd2e9c710bf1e88eb5da7
MD5 1ee9882f78798fee5c85ba6010daf244
BLAKE2b-256 29d94ac93b971b23c69f5c35617d65470c7a5ff5bcc817d190301c14c7b73bbb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 119caf562febac30fdfe111423c8dbe83c1e955c519a11a3522922d9fc879728
MD5 95f3895ea7c04697352d6836a860a38e
BLAKE2b-256 e182b17832f5b2ba09f5d1b0edfd83d6317dbaacdcc9bf79684127567b336d48

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e346fe6d70aa6264c8f3c7dc838ee33a4e6d5a0d65d147332f87fdcef3726b99
MD5 74f3354bdab69e88cbaa8259636fbe82
BLAKE2b-256 60edc42b32faccc6e4c96717ff32a547588303f55f7b9b5ca226d0cecd7a1c14

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 8361e75bf5b84f498807f67f96912d76d76aabc81b2c75bcb21faa2cbb508d3c
MD5 857edf24074ef4118cefc2a145b8a9e6
BLAKE2b-256 ac858bf40a3507b3ee313ce740c421253a3b9800c4716215931793c2fed719b7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 556e56eb021c0622b2a8b7ec8e0539d2fe1163d541b63ecd869d02e7691829e7
MD5 642c4c5f5adbc827c8758c75447a1349
BLAKE2b-256 906a6b36926cc0300a4e3928512bd0cc9181a4c91d4e268024fe244d120dd11d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4ff15083a56da1cf8cd1c3471928eaf0e808968c9c12eaffcbb074011d2149c2
MD5 b80ae16def68e53b196591e714e6cd26
BLAKE2b-256 ab88de1d6206fcbd5aba7e1b3fd2a431a468c14dda5879d06a8031cd66de4217

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bbcb9277f0497ddd57da3618339a81f910be8a218925f92202f3831d2ece5cab
MD5 71a4110de139b00d0db035e1c543a120
BLAKE2b-256 b9a3cc3ce60d3388c81e1f92edc0c7d371e34dec3955ec719d582acc3d54690d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d4548c7c8ef0fe2062b207291bc38d437c1df8f3fedec1a2cc515e18e5514806
MD5 b5af6038bb69d2ff6777aaa62bac79ca
BLAKE2b-256 f9be875d9c113700382de9ef9e70ffb50691e59d2f31e5f9a7303af707214fb7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 a228c444def7a9fb96c0feeeaf73e6eacaba9ae586ea34e81cea49d8ac38d5b7
MD5 376f7c326a4978f315a24dc19c53a8df
BLAKE2b-256 7c226c067cba0550ab2ed1d963c214beae1288fb4cec4117a47fd475abf3a490

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 efb0709313e32017b73ae5f9780ae1263c3e4483afcb4981005338f2d9686e5e
MD5 ee92d743e4fcbc6e418ada0f4e371716
BLAKE2b-256 251d9778aaf7a5e75e59ccdc66ebc5fcd3248cb9d2dc86f09d2463c672352669

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 149f463c010f6789349687821cb272537ec005ebcd3ebd0056889a6514235588
MD5 62061f79bebe90dc83b5fe16d1d03a35
BLAKE2b-256 17b7b49b4f3b68f7f56f507082176881e7dbceedecd499a6739755fe05ae0c49

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 82c1f26cb60d98177c5f41092adf9a6ba0012a74ec9d694eb77810efd59e64b6
MD5 7cf6162e0907b44002f0ad30ebb22101
BLAKE2b-256 62d1bae92adc6db43a6f423978e0742ba60fae3c47999f5ec5e1fef217cf214c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f73692dee745dfa3dda0a6430a518f719beb35f74c1637ae617331408e11a7d7
MD5 c8b35cb0fe6e17f578db1e0bd5809548
BLAKE2b-256 771ec2ba667de067ae9dbf3da0ab0545b044d958b8edfb19b873ba84b44f9081

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 15d169fe0e132c54c585c7d34a14ec5088bcf794e5f0673a059ed4b02ee7261e
MD5 52e4e235f11739cea784e9de672d3954
BLAKE2b-256 bfad22ff089e3428e7cd375234fb5e4aabb8f0b5a6ae8daf7903fa49b9a4e9bb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 50f0f9ce943ca2de1388cb8ac7e0c0e7aada4862dd13a0637fdc38dca19258b9
MD5 dd7a39f7e0c27e4565b2fd62de2f1523
BLAKE2b-256 07319ae8e0923ac034dcb3f9cca304f552e51665440388b964f54bb16acf5a25

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 255264d470cc369f45c0f8ce49d3035cede78c51dae295c2ac1dbbdf415aa4d8
MD5 fad2e76b630c2d89e8301b615ceef995
BLAKE2b-256 ac7d5ccf3d8e8b5a93e110e4a8c19c888a56d27d32a8fdb9361b3bad3bd18db0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cfdb8afe0db4827234a90e7c3d9d82c3ef5bfd06124af622b3c88d0800192e70
MD5 af956e0ab59276983f3e0df83a69facf
BLAKE2b-256 f7807b59635c405c7584c3f7e865ea896aa40853488fc93103d2024c93ba7f4a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3f830abcc29a0aa98680a3d587af7fca5844e06b147d6e39dfdc8458e5b77a88
MD5 569ab5568db2f8ff3cf5f93401bf8107
BLAKE2b-256 c718d66e2eb1b30ad4162c52255bb74734afdd948882efd4152f45eeed678c03

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7a8bf873e115ee76eeb4f83ff5d4fa60281add414d2befc186c073449330b5fa
MD5 f00452240eeef24837deb2248af371fc
BLAKE2b-256 8b733c35391c07fffa4930c3257dd41880c8b492abce1499d0e0c1d993256372

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 c6b975f7d35109ce7f7f466fe6e980052e9d6cbfe42f2770511961bdd3dcdc27
MD5 20fb860e739da92707b46d2fd2fd872b
BLAKE2b-256 db68094855f4b6a84e77d157a794604576ea9f4f5296a78d2f5002f126f90640

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1a2616378301cb6409289b9feeb474e579a08946354651b6752eb4dfb2b6a660
MD5 d5afe2bc9ca63e65d2c2a43c2b826653
BLAKE2b-256 f30c12f8807852c51798ad5f7be136089055fb6f6b634fa005b833b5e71d2229

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 75f0cdc1c98b95acf255cebdfa0d192f3ceaf644b56e320a3cf9a5659f5258f1
MD5 dbe0c2ffb937ecaa87c386e56889c0a9
BLAKE2b-256 52929f5d18d10fdd70bb7842ed5f5959237f314c3a8209b14c3f2784417dc2fe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 97073be34a2ddb03f8ff0a14f84be4f19a3f84f333f90d962ba7f915d61d9bb9
MD5 cba4909c0d0a11cf5fb694244121f979
BLAKE2b-256 afa50e98651dd88ca20b936e4e8f0641905ab1ca0fc360ac09ac1bf82f50cf0e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4c951d2aaee91595c1838301d8d1eedacd96b0d5a8fffe963e380bb10fb3dbf3
MD5 21a8a9e6cdb3158f9472584bac2a98ea
BLAKE2b-256 357095ea2a86e2a9b72c7d43fe71b70d6566a2aa56eb859e9dae427835a46bad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 c6941ebc38396e7c28aba1460a37fe30ba5ec13230da48b2830fc5685474b783
MD5 b509055c399f137797e65fa8051776f8
BLAKE2b-256 1e9f31b0a98c540c47abcd5be58a609d6543c7d8329626d5bb3b1f14dedb0e0c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0679d9ee00666e359ed128f6d69ca8da0fec99a95356d824adcf69343604986f
MD5 bdf7d39bfce978a5f8f05cce515caad1
BLAKE2b-256 0206ca59e80805ab7dfa30a2a9a8543889ea8d10c3d34837d1fcd6d998c430c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cc2a7e4d819b9fbf1148de8c415e75eff1c1190aa24716a685c7f1836cdec16d
MD5 ddb9d8f1c269446b6a5a670f961f5785
BLAKE2b-256 693829bd287df980b58c8cc5684a8994c559324a20043e3834d28c37e09a41db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6f4c08e8e5af3344a78726a416cb3fcf6aea5e14965229045147532299b7dfa5
MD5 56472764d9940612105d41dd20451b77
BLAKE2b-256 cd7318b27eaae55804bd97fdfc5aaa108fd050be21c7f30beddcb71dd37a7f75

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 5437e4f17464ecc3f0ef6413978abc9529adb1d19c7311f40433ca7c2c95bf88
MD5 29283f54e8a3253311f824a501db7650
BLAKE2b-256 8bdd7c510eca9a187e34b287a017e2c3870e26b93f69ebdfb50451abebcc2348

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 f857d4f05b3f298d38a149232251e7925e3e000a8ae50034c17d3bb990f2cda0
MD5 f78ce11c262d3da56eeecb4bb357ee36
BLAKE2b-256 3bc337fc355a62e4386718c1a83a16a34e0049d6e827554f7d7b60ea6fb597a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7172ea86569911ae3117fa5f6014e0cf81af668b20780411f46feff01fc5a8c2
MD5 4e3a76fa0d2ada54ab9fa7a664cebbfb
BLAKE2b-256 093672464700a35aac7d96adeab705d182339d6f7aaa17a863a046c3cf14847c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f7b199cc3de5aa93eb8f2ab629d4adcfa9855c6aecfe1447f374cdcab6b39560
MD5 13df9abdd4ea3d9bd2eacbbf1f6a7d5d
BLAKE2b-256 5e24fde1d90e7b9a1d530444f31fef2ece65a05a52f255cf11d27fd86bf604bd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.2.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1a63fcd9e7400bc028cc5464be10a28527b82dcfe1d33d370cca8815d6b03b85
MD5 ff425f23ba358f9d2a5aece2ae4d3008
BLAKE2b-256 00b4dc93aa24de073916574b4b6bd8ef367fc97dfd4cd922cfc76ade27b46339

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