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 support weakref.

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.1.tar.gz (30.1 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.1-cp314-cp314t-win_amd64.whl (92.5 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.4.1-cp314-cp314t-win32.whl (76.4 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.4.1-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.1-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.1-cp314-cp314t-macosx_11_0_arm64.whl (88.7 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.4.1-cp314-cp314-win_amd64.whl (90.4 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.4.1-cp314-cp314-win32.whl (74.8 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.4.1-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.1-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.1-cp314-cp314-macosx_11_0_arm64.whl (87.0 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.4.1-cp313-cp313t-win_amd64.whl (90.6 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.4.1-cp313-cp313t-win32.whl (74.8 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.4.1-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.1-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.1-cp313-cp313t-macosx_11_0_arm64.whl (88.6 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.4.1-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.1-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.1-cp313-cp313-macosx_11_0_arm64.whl (86.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.4.1-cp312-cp312-win_amd64.whl (88.8 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.4.1-cp312-cp312-win32.whl (73.5 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.4.1-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.1-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.1-cp312-cp312-macosx_11_0_arm64.whl (87.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.4.1-cp311-cp311-win_amd64.whl (88.5 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.4.1-cp311-cp311-win32.whl (73.2 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.4.1-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.1-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.1-cp311-cp311-macosx_11_0_arm64.whl (87.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.4.1-cp310-cp310-win_amd64.whl (88.6 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.4.1-cp310-cp310-win32.whl (73.2 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.4.1-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.1-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.1-cp310-cp310-macosx_11_0_arm64.whl (87.3 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-1.4.1.tar.gz
  • Upload date:
  • Size: 30.1 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.1.tar.gz
Algorithm Hash digest
SHA256 a7252df09218d90bc7ab9f2ce9777d5bfaa0639db0bab1583ccffa7ec99860bf
MD5 c42924235547960261ea0f8fd292b551
BLAKE2b-256 2fbaf75f0d289974536ec2b17037da67ca06c72edc67cabdaf772d0e54b2b45b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 84801c3d73a91907d4ab7f9ca5ac1d8d8d7356e08b394db9352fff30e993cc60
MD5 50e563ee94b9aee268cca6615b727713
BLAKE2b-256 796c6f62ad07ce69e69c55a356601b6b6ef7cb87df1cc531c78d5c0e0d83aec0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 124323bf8261903d94f6125cdaccf606428d067607911b865a13b85c3ebb241d
MD5 7221fbb4afee57feac3ea5638c914cf3
BLAKE2b-256 4c87ffcfed3283cfde821ecc2e9c81bb458f341295817079caad43e0071e8e10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 794819d4de90d5fc0224716c313438904a538d760c52212c1860c21deb88028d
MD5 1573c77b67dbe94201d4580751ab0c28
BLAKE2b-256 da01474546097aec2bf1846c1be845fa209d2c18bfae1308d0dfc1e045960e55

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3351e76401ccf860bbd8ac3e6e357fde03610d08c3936a21e7cb6aa66781089a
MD5 68f34aacaabfe49a169a786f01d0e699
BLAKE2b-256 75788f6c113c43a0edad4b0e3afba5f25d772a6ea0c2163b58051d6ca44d11fc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8133abe1b96db175dda675329cf38417453cb050799d138e41984650c7f6af26
MD5 c1d586c68c03d68431843c88c93a30ca
BLAKE2b-256 c583985fedee5d5f50fd7f22dc46e5e66c1c65ba4282f12f9e01ceb4652f0e12

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 28ab7bd0ee372c04fcd00ea008e11cd374331e87809ac5918ba03564e019b4e5
MD5 33e165ac52ce2e715c5f9ec96706b078
BLAKE2b-256 802168b88f24c3cdb154a87fa26fa59b3896b2ae7977557a6475bb4af91a21a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 7b75d347fb09efc32eba07d9cfd6a07609742efbc2617507bace4d36b7493a9c
MD5 55da528794025130d029e6c97e9d3662
BLAKE2b-256 86f0b8b072d03e9325db03c2c45d9882cce63bf9e86c5f231200e360318953ed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d402a44a7d2384b550602049e05b24a8f439ab85c16b73830d2e880c872b9021
MD5 25e9038f4756d30715d53efde2c103f8
BLAKE2b-256 7605356b3e8afee37c27d6e5984fd906d191b14dcb629e675a2e9c9407cd766d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 496900265e73d15b5edede7d6e033669aef9fc0355a1e8f2a62f5ae583ccefa5
MD5 22258798da87666a891e31b4b60bb66d
BLAKE2b-256 db481f0bd0f78674e63b7bcf652e54a30610dfbf15aaa16268bf247df6e72ca4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 af2bce3e4c9f6a831d3c023e7266e4ee7c5df432901c1571019270aebaa1db0a
MD5 c3c211187bbb627ba71c9219f309e462
BLAKE2b-256 39e8309f6233d8a498faeb138b36b06f7e6c7c3dd5a44c16b4141d7c4b866075

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 a432b5aed1c6f72ff95b7f22e748b449d83f7e574bfe744fcac92bac06e24955
MD5 87ef497e5e911808b89ec608c8125ca3
BLAKE2b-256 d14f6ce55043de9cec5469ba3213cec21ae0737634131c326ed3e0f42a11f0a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 aca914c1231489a4d70277b198aac5b31dcedfc6e990947c90dca5564c82d62d
MD5 2305c9694e2c64dffa585fb6af88af5b
BLAKE2b-256 dedfde623bb922e6111243585362451fc4bc1b6f568e56b843bc82204cee3be4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 85914f6175ab0d153a0626f497a3bccfdb39c85040612880da70ad62848d57c4
MD5 45be9a0d5971bf667bccf58e688ffd22
BLAKE2b-256 89dadff43b31d3f039c2799b11ac85c019c9ef7b9e9072e895de53c925b8ef45

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f86b102df6e4e5c7755a7c7c052d5a653413bbde8cf18864db455cc5354242b5
MD5 d15a941b5eb59c2924fbeb1907b2042a
BLAKE2b-256 a2846582d0c0df64a9b33e76184d5f366edd66ab03bcc84b1f21c4d86fcd3429

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6431e697cd00382ce5fca4a38c340d84382d944bd6461caa1a8d9cbabb0a4874
MD5 38fe4d056ee238fe34fbedc3c508cd7f
BLAKE2b-256 0908e328fd088bee140b1686b9371b211aa8f3a95277101235b9d7c16557711d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 134a94978c2251ec188461a5a4f7ebca39ff6090167116c4418884d6678df3b5
MD5 1aa3f25ac867102607d9ba13780e738b
BLAKE2b-256 024661f9d3dc9603cef6e41ae8d769cbee34def0ec33040900ebd9499a124023

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 6f916b49899f660ad3eec925815c691dc27508bbe3114e7fcf2557a4c604c66a
MD5 f7953db55c6f9ac09bf90ca3cb5a610f
BLAKE2b-256 484373a11147a50e79a011962e0c0603fda96f35b41405a98462a254f42b1c05

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4ed1065925dc695ddaf62baf1f2a0ebf583efc58ef4bc9b0205d6f1c616d7daa
MD5 a3f2f6bbe07761c3b0d64af356af2a0d
BLAKE2b-256 cbe88be7040eaf502af7f7e2dca26bb638db73a99461d35f0da346d83f7dc03f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2044b1d68333797e6e3e2df2b88e43ef152f3910bad992b2495ebbe11d2c194c
MD5 8084f7aa875d1b31a9205ef4ba1514a0
BLAKE2b-256 0d6b07c1259771f2c41af6a6b318fa6f6cec6e2df65f5a1d5addd22686f5eeb8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 41ca03343ff76dd7f1b2e31422898ebedde148d0adff8af663edf8cb29764e71
MD5 979892fa9828d59600d81ba69abdc394
BLAKE2b-256 16d4b9b0aea831a85c90b538a59fa7bd69543bbb9bb62c57572b19936cfc7e02

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 8523d4df6399706fc2f9dcec0e40e8faca71456304de1ef6a1999d7552d86000
MD5 203cbc445d9e7b53af53781bd8c261e6
BLAKE2b-256 d5b1ada0da449380108fde0390fb80a649bb53fa92fd2a59d294f75b40fc50e8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 61e05db483b3d5d970ffa34937e5681284b8b5e4ba7cc2369e7b840487a2a90c
MD5 0e5cf4f1e2817761fb19c5fe0f11116e
BLAKE2b-256 8a97cdf51e0446f3942c7f851e94b5e5909ad5b1c14cf712044fac2847a35d5d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 beb2bfbb0ce8f139b04a5aa3f1d7a8db73276b34a1fb1c66bf8d1d0fb8cfd42b
MD5 1627b6c09204fa5460f1cd80c0aba1a3
BLAKE2b-256 33dc4c282613475d90ade3f886110175ae03331cf9e74e9403fd97b304c2bf67

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bdce10ae2ff9b39f6d94998eea4fdaa4d08cd2c527c742a14349e42043d55b5c
MD5 870a78a7220dc47f8396397e2f0abcc5
BLAKE2b-256 e80e145597d74c310f4cda4e39214848a2dc303f77c8856edbdf05cf7b9c5df2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 98f7dbe312622625df1b29cb9760ddd34a1707fa1e3954bd1dbe0da587668899
MD5 9de69690d0c796aded6487e36b27bb02
BLAKE2b-256 b97433aa06aac3fc4ba74d767071e682245d72995da543e4232f3c7f2f921353

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 90a9d6ebefd4197591bc4b7a0d13210c5723ada805ca1d5cdfd0da16f9b4928c
MD5 467e18917971ddac3684e0b23ba4590f
BLAKE2b-256 0240e44d8cc66b33de258971b06ab6ed5945405db56a03d351e818e9c71a1970

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 d6a62dd6e4fe29f372537b350952da0102e1d3f1717e114179ed561c0457e23a
MD5 40001fe45fd09c29c24514dc7d5d57f4
BLAKE2b-256 a19e9fff071e27f2d60cc1391def94b1e86a02a50f45b9eed53a5c2ddab21a8b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b3488b6fcd1dd3653d688ac639bd512131c5a8078f76bdcd8e5a968587f4bd67
MD5 32d0b56c2677f7e8ab23095e7e9661e2
BLAKE2b-256 c53892ef4fbf5f6c674d794e40faccc32c3cd7d698fa7b9612a68b15198f85ce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a841c36f9853cdfe8c90f2b796b73892aa657f68b6532e22d84f7c3e21376b66
MD5 112d51298f278dda12e9d260ed104253
BLAKE2b-256 4c05cafdb226fcaad5c91a8de681d6147d7d551886290fe1a51ae68eeca209da

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 59808aa90bf2b82f3df47090ee71db5d002733fd43b4d5da9cc4f8091473ade6
MD5 a5ae6ab62b55839826d734107f30a88b
BLAKE2b-256 0356981de033a16a5395a4c22e1d2f50a2279478496cd797d686e2b127e9096d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 845c3b23195331f19a6be285f6d8108cf06eaff0de8381a118f2cdc0a229f5f8
MD5 dc61958b60c387ff4c24601a017ec949
BLAKE2b-256 dd89a83d33b6effc7d9c6291b35f80b57fa6a36d978e8aa042127edeb269e510

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 b836c77dc16aaa04f7632693f1503d933923cb464946b31af12a0976afc04521
MD5 ae3dcc3f341baea42bd3289bfe96d48a
BLAKE2b-256 23f9f0644693f23ba9de6f6999c473724741b83d96412a0086e9e7dd46cf95b2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e1004d926ce22f11bb235b2925022efcb62ff7b1ce793d645ad3813dfbbcd973
MD5 1288c947cb63cadc55e3b252219d4fe6
BLAKE2b-256 13007fa1554b8bb9549a7d09bd3084040e81107d6588fa15755cd67ac786c8d5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 52c7fc2070f34c5ecd63aec1802fa7b8493ab2acee7703866366385f748df079
MD5 a17be78c53968d6ca9d08c08b881cecb
BLAKE2b-256 3df49b88e01a340fa402df43189a5bd2dcdf9e1e9200585cb641470374979070

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 505cf13eb66f750c431541d0cd092af1c2a95696112a2ec376ac0c04034f75ac
MD5 0abc54e0d203f9dc382bf5e04651323d
BLAKE2b-256 4be1863d4b068258b02293ed5f55a2dbdbe049594de0cad9a4c11d04fcc56d7e

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