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.10.tar.gz (32.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.4.10-cp314-cp314t-win_amd64.whl (90.2 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.4.10-cp314-cp314t-win32.whl (74.1 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.4.10-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.10-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.10-cp314-cp314t-macosx_11_0_arm64.whl (83.0 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.4.10-cp314-cp314-win_amd64.whl (87.6 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.4.10-cp314-cp314-win32.whl (72.8 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.4.10-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.4.10-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.4.10-cp314-cp314-macosx_11_0_arm64.whl (81.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.4.10-cp313-cp313t-win_amd64.whl (88.1 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.4.10-cp313-cp313t-win32.whl (72.2 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.4.10-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.10-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.10-cp313-cp313t-macosx_11_0_arm64.whl (82.9 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.4.10-cp313-cp313-win_amd64.whl (85.7 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.4.10-cp313-cp313-win32.whl (70.9 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.4.10-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.4.10-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.4.10-cp313-cp313-macosx_11_0_arm64.whl (81.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.4.10-cp312-cp312-win_amd64.whl (86.0 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.4.10-cp312-cp312-win32.whl (71.3 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.4.10-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.4.10-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.4.10-cp312-cp312-macosx_11_0_arm64.whl (82.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.4.10-cp311-cp311-win_amd64.whl (85.8 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.4.10-cp311-cp311-win32.whl (70.9 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.4.10-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.4.10-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.4.10-cp311-cp311-macosx_11_0_arm64.whl (81.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.4.10-cp310-cp310-win_amd64.whl (85.8 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.4.10-cp310-cp310-win32.whl (70.9 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.4.10-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.4.10-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.4.10-cp310-cp310-macosx_11_0_arm64.whl (81.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-1.4.10.tar.gz
  • Upload date:
  • Size: 32.3 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.10.tar.gz
Algorithm Hash digest
SHA256 9bcddf4c7a53c71350f252f82df4f9767891058108c8c28a34fb674598e607d9
MD5 b3234a93b2389f690945ee32823beac4
BLAKE2b-256 1d99dc56a970e3247fd9e52d6b7f48291c8b882f1c9605c4aa2d2294c2a088c6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 efe471cfb92b1cb139e535a493129bbc34922794016025ab06b80ea5fc191120
MD5 6630ffb1c2281ea7de97f0b1b906bd1d
BLAKE2b-256 3e65d992cb105768b9b34866c4c53b70a9f13882719a84e4c450df3e570b501e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 3141c870c933f7803b6fcd2047c362297042df7f540939307920f8439da80163
MD5 5db6452113f77e7e55a164656394c5d5
BLAKE2b-256 5cdb27bf471c3ca891f74567c2c0a36332024716398caadef7c7a7b318e3c3f0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 22ccf547f4328d84a589e16dddf0fab8518ba1b01257114c4754d532833e96fc
MD5 9fad4beb7e7fceff733c842e713f2ba6
BLAKE2b-256 94b5da8450b641da569c33ff4c62f59c5db9af8447cbc4aceec1ac049986eed4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 eea5be1b68694103540f582177d2baa68508cd74856b436f2d0c1b0f472cd6d7
MD5 30f6001179d951ff0132cb2913defdd5
BLAKE2b-256 103b0b182129ee97f0ff5e5e780aa4367849b8a1ad11a78219fc006becd71629

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3aa5fc078a9bbca7bcdec386712ef8718acb0ee2d849c8f38116bb8497db5927
MD5 e7517f45c4348eb7284af5b26c8ce18e
BLAKE2b-256 743a38ea1fb74ee6dce29dda69d7b37f2eadb26315abf7f78a507f07b0eefb1c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 c79598a59e7d0f28954b999d1cb5b3f19def4a08e642ad074131090b54a20969
MD5 def7978bb0788077cce9b5ef91bf62d6
BLAKE2b-256 f6a2e47ed489ba52e97dabad10750f445677de8217b8fb1bb33615914b890929

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 03c21cc9988f79bb62c40e4a7d5ae90ca4da0c36e6bb5ba38e6ff55a4251efca
MD5 d262fa7e0fe671012e4cebba53327e23
BLAKE2b-256 bca66ba4f130bed5c49cd8d27839490f0eec05212ef1d5a350bec935c7350281

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f1eff56d1d9c57e530ce941a663d2bd5ea52da6a37037afa4f10b8880baee181
MD5 746b56d5d48869f2d25a73a19ffd9a72
BLAKE2b-256 3ee3b90fc27c9efe0d85c7366a2d8aac0ec47501734d778ce100352779a8539a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ba8b6770462394fc3f288d7f000b6fee9eff9beeb8e04b126b3b055fc26020c3
MD5 b4edb70b12260c19cfe66a9523810af8
BLAKE2b-256 7e1a17d55850dbe65830f14936ad162016993e4104d9bd5ba90b9d2833eda063

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6c8125f85145996c2d721474ef51729b1f3bdecf81bb8c6c0d0d0e86c982c52d
MD5 ab65f64686fac78718dfb68128c2197e
BLAKE2b-256 dad6d74193500d4bf0676a8008d8a4411c76fb117247b668e70e61037b17fb03

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 98e91921877e81a20a92b5f94d8aee69a963fbf5ac3a6dc82e23536bba90a4fd
MD5 597def50330a777267677991f15cbecf
BLAKE2b-256 76afaa107752d549b0200c3c945dfbf4396825fd688d3ada2d8f327328d903c0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 f9aa6d5ec4ed7adf582f5a9bdead993350e153701108d231763c03df869c216c
MD5 fbf21e30dc123f0bd91c3406b85b0c71
BLAKE2b-256 ab3fb718814923c4fd2a6cbf52dcee050ea890ee087dfc81f5f2528864392095

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 bb8a874630b6a8b92b892e93f50481a1eac53e358fdc7e27ca88c8f6a371a4fd
MD5 44b54d510e63374cf4decec37d2f211e
BLAKE2b-256 f73220759873b06243cae1e986615216bd30f65620dab81e27f70b2d60e5d163

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 226214c996b4d0e64c4f8524272c907b1473c604800bc53fdf1d70cd12995328
MD5 7699277833dfbfbf16f4156888ebe392
BLAKE2b-256 49824bcfefd48c11e85469974228494040f753a621cd3843f91a6b5dc73c6728

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d7dbba55edb174eccc154c3289d5cf82786b4d689cfaa1ddd00a0b0c99295a80
MD5 5e4dec1ac89e8ccc31e35e7e60f3756c
BLAKE2b-256 272c7886cd2c228a78eb86e44fe4e077a4b1f1ddf9d2967a8abfae35fbfa1358

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4ec9366c669658a1e7726a4ce545aca40e731985c257cd94e1a235290c43b52e
MD5 7b101feaa83189190fec272f4a59eefc
BLAKE2b-256 48945cd25e6f53b56656e14f9ae72f18a9f22325620e4f1cf9327f1e57b97279

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 3bcecec4105fe17d1209420795b7828cf9e6a50be411d6ef8675b1426d9ac0b4
MD5 8de6ed75bda5d3fca82ad7e5cd4a4423
BLAKE2b-256 0fdda8d7168f75e8b89fecc32d5886f3241947e0d1964782c0454baab8c8fe9a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2557081c4f996d4bcf34cb6c583797f5f5fdde87de4de79db8914829601cfe94
MD5 0a40b5f79998afb83b6d20be0aee7c59
BLAKE2b-256 f5793a5c3f386b3a142a840343d14bea9d188ce283f1223ee5aeaec12994b4c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 af9fa5b792cee6282d8a20bf338ab9981852e10b7e5d3b1da82b52af9c7c785b
MD5 eff2f3309f93e4e0143e4051b8f099b0
BLAKE2b-256 752c70c8655a1b2ce2ceaad06ce17b59d05ccd34d6dde9c207549e2c621a5788

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 16d82edb8fadeeb721c81e7f458f5a4ce99f65b54bb294a7278615a55a0b71e1
MD5 ed617e2054480e3dff3f3465d090df00
BLAKE2b-256 0518548e49e6c9381b578bc14e3e749ac66cf846cd87f0317ddaa021e81347a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a173a527af3a4b185244ed43ac3e65656ceb83c206250ce130b003b5c28b8534
MD5 7d6ef4599632546baf0e075e81aa879e
BLAKE2b-256 342f40cd76ea145fa2b59e64bf58113e0b62c28f245e3c5f296856cf5840ad48

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 51b79057b017a790315307891c6f636e513997d6ad7ea3e8caae04966ed93388
MD5 fe4423d38b8f0b34a5e8d740107f75ac
BLAKE2b-256 06d1d42b946c8eb0c9242fa9886fc208146252c24d916b47a0a98479379d880e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 599363982114965aa7144ee11f3d098230f4c9fbd285721712ce75c88d20d6a4
MD5 4dd7891e3acdc2ceb4e31d1e1bbd8833
BLAKE2b-256 164af31f1bf88ff331922b8603682b754b87b85b25c2c222ac61964aed9e0a16

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 58bf17b0d2f58db9217b9de20ba8dc02cf412d9c871807c7b3e0f3c71cee06d2
MD5 0d5acffa4860e53a01e3de8a30f63e50
BLAKE2b-256 2f9fc3e2c0ebe219c2d404ed6bfef68b68091d50707dd5aebb708f2459de123a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 db3a7d1bf354b9be23dde3bdc388230fea1fa455fdad5415d25a53b125a50193
MD5 fbf4143e10ff6cdd67bfc206dd767079
BLAKE2b-256 fe2cf395b9a79f88939beb4672a9729fe49d4ddd2ac08e77267a4932101b5db7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d98c0deb9e195ca8fece0b9ffd291da4f765501632ffb2329823f33c910e2f1a
MD5 e49ad876c3d610d34397515284db9446
BLAKE2b-256 720dab63a92e500d7b3bc3b3bf6e376bd4111c99debb26cbd8ca6fb4baa0216a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 e9df871c03992046a481bb7c78af686974afd329d513a0e51e8d64fc856d6508
MD5 a6e1ef7986b4ff32c049f20e0d727e07
BLAKE2b-256 3ec7280abb0122b64e98d2c30175add631ddcc5fde32be5f8318e2a8f12a5398

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a5e6351ac8909eef2b3511a410db7ec688bd26fcfe5d181bac338e1d7524b8e5
MD5 f5de3e4a70f9fdb13306275b35e4a1e3
BLAKE2b-256 7d13ba7983a9c7ec521bfb41bf272084192342ab967e3c1b972cc76a0eb99780

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0d49f8b66279536bb8477ffdff2b03ec146f5cae9f5166e345426c0ff550f2be
MD5 ad0299bf9d8670285c49d5039e370d6e
BLAKE2b-256 98bbfb5ec93c038ec7fb40d3f83b70c42b511b1cef169b05fa4c19e5e8183f55

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 af53a0f3716dad365ce79091e3440bcf35f14418c961d53ce9d83637cbd6f546
MD5 2d242969094e7aa7bbe6c9f2dc951e4d
BLAKE2b-256 41eca851a6cefceb78d1ed5cd169839fe6c9fe6a58ae0c026f19550cdd9b5ae8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f651abb39429af74e35f5fa4a23f0566a5af2c2a3af818975e3b845f33ef3c77
MD5 ab4c78a996242c54521e24a1e50d9437
BLAKE2b-256 40dea382e0eac36f86eb9830594c89f224347b24f5d5c9b0118523689febd62b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 adf7a0c70408aec6c3a050acc90aad38f2e49a063456589518644c486fc7fc48
MD5 a2dd039784c8dbcd5534b211a17cee5e
BLAKE2b-256 adb2409b469046159291b8f62031c24a927edfebdde4dbcd1525d3e7bac752f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 038af04f2a53c39c0b59afc96d4cefdb29487b75c1d72368f349c0b5f6375dc8
MD5 29d898a3cdb053e0ea2d1e84e7731c12
BLAKE2b-256 083761cfaac5520c6466c3e3e4df98717ab6151ec7ae0cb856ec4468ef6cef08

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b275e1aa89a3ef8e1c693174316f8e93a24aebb197671fc633b3149dec36a851
MD5 691d46a01cb05ea7711e948f8562fce6
BLAKE2b-256 b06005f42719ad0f1d32e77e003e0c51aec615382a55172656c4024f27c3c754

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.10-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0fa0376f52b22b34c909ca1dcee9a76852fa7e0bb2e1f83ff4263424a538a0d6
MD5 6a3c9d362197265759a2fac6bff1fd93
BLAKE2b-256 1699c202880f325a066ab70957007856768496fa00bf2eb59b9a7dc5f7a2ac4f

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