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.

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.3.4.tar.gz (27.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.3.4-cp314-cp314t-win_amd64.whl (88.5 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.3.4-cp314-cp314t-win32.whl (72.3 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.3.4-cp314-cp314t-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

private_attribute_cpp-1.3.4-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

private_attribute_cpp-1.3.4-cp314-cp314t-macosx_11_0_arm64.whl (84.2 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.3.4-cp314-cp314-win_amd64.whl (86.4 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.3.4-cp314-cp314-win32.whl (70.8 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.3.4-cp314-cp314-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.3.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

private_attribute_cpp-1.3.4-cp314-cp314-macosx_11_0_arm64.whl (82.6 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.3.4-cp313-cp313t-win_amd64.whl (86.4 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.3.4-cp313-cp313t-win32.whl (70.4 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.3.4-cp313-cp313t-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

private_attribute_cpp-1.3.4-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

private_attribute_cpp-1.3.4-cp313-cp313t-macosx_11_0_arm64.whl (84.2 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.3.4-cp313-cp313-win_amd64.whl (84.4 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.3.4-cp313-cp313-win32.whl (69.0 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.3.4-cp313-cp313-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.3.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

private_attribute_cpp-1.3.4-cp313-cp313-macosx_11_0_arm64.whl (82.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.3.4-cp312-cp312-win_amd64.whl (84.4 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.3.4-cp312-cp312-win32.whl (69.0 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.3.4-cp312-cp312-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.3.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

private_attribute_cpp-1.3.4-cp312-cp312-macosx_11_0_arm64.whl (82.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.3.4-cp311-cp311-win_amd64.whl (84.1 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.3.4-cp311-cp311-win32.whl (68.8 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.3.4-cp311-cp311-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.3.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

private_attribute_cpp-1.3.4-cp311-cp311-macosx_11_0_arm64.whl (82.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.3.4-cp310-cp310-win_amd64.whl (84.0 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.3.4-cp310-cp310-win32.whl (68.8 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.3.4-cp310-cp310-musllinux_1_2_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

private_attribute_cpp-1.3.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.2 MB view details)

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

private_attribute_cpp-1.3.4-cp310-cp310-macosx_11_0_arm64.whl (82.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-1.3.4.tar.gz
  • Upload date:
  • Size: 27.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.3.4.tar.gz
Algorithm Hash digest
SHA256 04af47c37f8ad6b7ffde9dfb2ad574d9a666db486e0080a4554c4fa3c4da65a7
MD5 ba5a92a559212d0ce283f806ac92c324
BLAKE2b-256 b0c17ae6a1bfb6e6395f6a4120f6e131db22bbdc1186cad21ab309f33a05095c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 b7f091c49d708885018106a679e3b6fdfdb06d2c64aa1d73fb7fe767484a37d6
MD5 23b72140764b4ef8e6d278fe2c56307a
BLAKE2b-256 d4448c2ab96cf4b1e8515869ac05242555095c30276062adeeaaab52079e200e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 5926005580f7d12abd9c86713c014c77357c82117238db2526e85f7e2e91495d
MD5 88e5dda397c9bb7d8d984f1a5859c0de
BLAKE2b-256 d1c1a2377f84e952c4f6dde26c90fe99adb5b9d37bc2aeb2fd57d9fcdaa1d8b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3e77023ff32c81c0003583c930fe16de6901d958aba93b535435089b1dc38337
MD5 1697975bfdeef75af66219a822ce12cd
BLAKE2b-256 1e20c02eaecf9e03fca51e6f454b52a3446a13fa21fa1c643a18cc734bccae9b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8e5e9b304719cb561c6f5d1716baee20b56f1c00187881f1803311c58cd7a713
MD5 2c9003fd69c5fca39372c6b27975b84a
BLAKE2b-256 bf882305bb5387ac6a1a33d54f4edf00b22437045e7275f72c85ac16af5c5892

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3fc88b96b0e076dae1cf1ad0ba9376fe39350edb5f436bf080fd21a4b4cb405c
MD5 a21652bf1e34703355b8c30ccdd1135e
BLAKE2b-256 ba1f6c9f058866c629d76fe6e674fd0b9355d28fde9e6c2a73c096c1c7151fbb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 95ef22f1d8358015de03540c7217aa35ad3a039ba9f159a4bb5accd623a2fd42
MD5 25770c99cca6a622b113c31b97d7eadf
BLAKE2b-256 e3a4ead0762f690150c415bf9c857ebe96223739ff1b2ed03316955b932182fc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 46fb6af797931324e3e946ea21ecd7dfc752774e5628c4b867f1a8ff0c3b75fc
MD5 ad1d15b74ad09bc4cd5f4b3279d088d8
BLAKE2b-256 fa61de36d95d7fcec3dfafc759778b7ba8f02999ec2df1e198c030e8d762670d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 26b20f30aa47dfc0d9e98359f6e0ff35f2d3423a3edf699bcbbf2e831626279e
MD5 7d4317097a899ac542aec2d3ee3e2efe
BLAKE2b-256 cf6a2ac825a64ee28f06ea467763dd503249f2f0a177322e2ecdf28901cb3f7a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f2fd45241ab2f1b6295c6275d948f0715c550e07bca65ef6864ccc300ac529be
MD5 12de5af61e785d21538974e85d1764e8
BLAKE2b-256 e3f41502c8c45c2c0d25f72acc5180b076a31d3e1f1a2917eeba09331895ee06

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 57b120c1d18f2e729f613bc1eccd9edfe49d756d6fe67fb3104e8b051385c26a
MD5 ab72e33ead011762e3f8e753142aa7ac
BLAKE2b-256 10be6ac74a3cadbd69009289eb937b22b1379f54602e7892ba0ae5bb58bbcc93

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 1766f04fa80dc4fd2d483c24cadb902d4b54e32e99e4ae193d760e07e2f04f3c
MD5 44bf0047f74bf472c0cd45003815ca00
BLAKE2b-256 4351edd738bf7f02e0b0cb7d4946ae1d10531db404cd1748f8e8e9944ab7d875

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 bf2c6bb8b5aeaa3215425dd53a499dad0a3083b6fd33e47b03dcec87f113fdac
MD5 a841e9e652bb2b1d528fc422c9a3e206
BLAKE2b-256 af5f7d58f190dddd5199b6b6ec491688ba163f1b6256b6168d0a46f43b9c2e63

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ccb7fc00a85f4fbaf804689dc3c3cfdd876ccbdbc050f0e3d3a8ecfbbce24fd1
MD5 9292a22a17726d24c444a0dd282765d6
BLAKE2b-256 d55195f0acd86958459356609bad7704e358ee0df1962e01208ed787b8ce483e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 10180221bc67a36da4e07ef3415c9374d4e4dc0fb2dd5ac811c218800f59b77b
MD5 8430c934e534cb30fea32d30ca6d4a58
BLAKE2b-256 86543f1864ca039262e0d0ebc7ff239a5fdbd3d80dc71e646baeeb20447d340d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3d070acf077af22b977cadc6bd211d039b282ae87cea67380bcff50fb0127330
MD5 c7983de23f47af02737d9b897b1bc110
BLAKE2b-256 a10d320022c76abf82ed87367f938b4927a9122fecb0c502b1dc19186c20b93c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 39bef444e8dc5095d8de04eb9671312813d5f635b578242b2074d3f2355dd090
MD5 c6bd50d607a5012983f495c133a21ef7
BLAKE2b-256 fd9ad5cad3a1b01d441761bacf3d1c948f9020831e550f209f53909938e21f32

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 97bc4e2a52725618b557dbdd18024810ea9c4ebe3919113e37d08f8bafc1521e
MD5 8276044433037500bdc900b348db21cf
BLAKE2b-256 fc9e91a4a9bddb21c9848b07c54f1d1468bf1750174a3e913b29fca518bb9ce6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0c0b4d75d98238b3d5c7a109d15a1b30128e79c22db803c9ee319a44d2f500d0
MD5 0c2bdfb0e0b6ee5ce84b6af7781ea0ca
BLAKE2b-256 678dcd36554ffca54c9555cab2fa630ac88efe280261c341c4c7644285271ea5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b1a5ed27ad750554d88911d0c4e269b4d1727bbf5c510726b48dc1a8251dda25
MD5 c5627ad678fd76ce0e1396673f14403d
BLAKE2b-256 4d240f989261aed128dd48cc36f8bf2705b537e68cc54c30f37e8c411b53be48

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2dc2034b7bec531576933c6fe018f64e7e158ab02450d508a0108df60d1e29e8
MD5 1d64d131d8ac8f55d54b34a9b2dac748
BLAKE2b-256 680cef8b333dac0df42440506d6c6a968bff6df890661125578383d287bcfc36

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3e3f4e359ca95a9f31f574197c84b97ef195fa30c7f941d3b352158004c01f94
MD5 34308321f9b1b9824493cfc5eeff708a
BLAKE2b-256 20ca9a102b4069f30e58765cb9b1fb272cec10abed7b2322a8f8f760eb00741f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 26aed4b3f9a5e1ce8244f534dd88e0ac64e171e44e0a16bea620a9c1938fafb7
MD5 c46183551cf074ba67f7503fc405b26f
BLAKE2b-256 d5755337e3b08967a9af4c5aae3e55fef68f757fab75264a34bf714e635f74cd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 17ef407dd02c020e0bf710135031e17ec213fd6781e806e65599a17e6e851094
MD5 62a97df1f3994fa01ba3aede554b2516
BLAKE2b-256 bb48e530bf6a1a2ba9405333ca828c75e9444e0032b84a1fe0019977f1d7253e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 553ad897e1daa49cbaceb32a7d59c970513de5ea56916cae2e419a008ccb6ab3
MD5 567b06c91dd419e6d1e7b3f3bc90bccb
BLAKE2b-256 c3c066765c3a2b72f704624aa73134b94e232e722ef8b13597c6e114bc8a8631

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 74c30a4b5def4a0b96227cfe70a38ea2bed089451ae5b49858ee2ea618457ef6
MD5 9d1ceb07f084e542b6006ca4d6e0d60b
BLAKE2b-256 b6ace4a04779b2fe7f9c77d6c80bfebd77ad39872453fd7276c585fe16f207e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f9dfd356712f631b2292c16d4ee6294117f8eb759f13b9ae69d38c4e711ce255
MD5 56867f846f888dc302482e5014de4579
BLAKE2b-256 731614fefd10020bb5eab7b5a9d1422fe45745cb2053fcce6f53aad240877c25

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 25f3437a8ecaafa25f1fff15a718c8d7fbcab553b9997a86623ffbd97488ea66
MD5 84a1e59ee9e6b9984b37dd85a13939b0
BLAKE2b-256 48a435f20df7bb93f0a6f17963e73965867d5a0110d8f6a4bfb977cb99f308a9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9e9c3cdccf9a64dcaeffac594f122a99a41e01ccb1bf9457b71bfd771927e59d
MD5 fa071da3c08b943fb86e449aa2a48a90
BLAKE2b-256 ac211ed78497e9bc809c0914d40db6eeab0693cbe8c9353df8f9070638cde769

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 681705ecd130cdc81614c0ea9f7b8bb05372af3266f083ea4b7251b8df27d9e2
MD5 8a5df0f9f3ec295506c93a31e9f81b28
BLAKE2b-256 490076d65631c72ba030c1aed3c37008ec1162e5f4869bb65f82d787fb31257f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8c501c3c592d45c23e37fe418f67119712b00b8d3d3377f01f163aea9950d8af
MD5 4ebaf3ac9891d83c1f4e99431004aced
BLAKE2b-256 abd98d390e5e56275b1c63023d71c5020d72589c062ca0d30a603808aa542381

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 9be0494883f9a0fbd68ec39f96e30e70381882b62cf5f860a3e3b0d0c41fd762
MD5 0bbff92cffa1158c773c0c183ff72774
BLAKE2b-256 8ebf28a40bace67ac14e7c3e27a485f41d87c443f5e1acf16cc442a403f295f6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 e81dcdd446324ed083f7ae737ac4ee368cebe5788f69c5a599182b89b89ef81b
MD5 7fe712bb48ff398c5e506356528d19aa
BLAKE2b-256 cee2cfbc480c275b1767045be27dc1674615310a2b764bc9054849ce5f1622d3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0670c498a3a1bfd12607358cfe03aa9bb47d3bb2ef512be3109258395f417c99
MD5 f2ab86792630f2918390c5475c05139f
BLAKE2b-256 e9bf05e45ea7e138b7cd6ca053a1c9db02ef1a23d3e726acddefbf617c042d3d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9fb746f5722c5a748e5972dd9847168f2e88810633a97cb7d3bddd9e16f42de3
MD5 304dc1e2a5de1f817f89aba8c3632273
BLAKE2b-256 ad23b2fe8417fbe8ae94ede8bdb85210ee68384d61867f80994133fc4f05582b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c82671eea4e3dfff8831b12f4051d2b663fbf6411a3aca866a28ba59a0047b18
MD5 985a92dd43714b6373bee3e73fefc12e
BLAKE2b-256 18d5b0185fd850283b4002d7cbe6f4044eabe788af144184e5c95b05f321a202

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