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.0.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.0-cp314-cp314t-win_amd64.whl (92.5 kB view details)

Uploaded CPython 3.14tWindows x86-64

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

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.4.0-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.0-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.0-cp314-cp314t-macosx_11_0_arm64.whl (88.6 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

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

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.4.0-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.0-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.0-cp314-cp314-macosx_11_0_arm64.whl (86.9 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13tWindows x86-64

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

Uploaded CPython 3.13tWindows x86

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

Uploaded CPython 3.13tmacOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13Windows x86

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

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12Windows x86

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11Windows x86

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

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.4.0-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.0-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.0-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.0.tar.gz.

File metadata

  • Download URL: private_attribute_cpp-1.4.0.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.0.tar.gz
Algorithm Hash digest
SHA256 99c607dc92edbea7785088dce212c6a5ff4bda4f8e649a3efb5fc5f293a8b17d
MD5 d7fae830a877117f88036d430332e358
BLAKE2b-256 15b680dbb551e5cf189ace07d79cb35151ae41fabcb83d74e944c285f55ba760

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 219462452eb2b9a113e42a56d6b2a78cb9981523f79401a336797269a5632bec
MD5 7e8bab4423281372bd9ea93aeb0c7fef
BLAKE2b-256 55753ea5987c305c5c18310b18aef57340d60c36903a1ca69f63466d942f3047

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 9d862992db1814cf0dbc2feceeb2e8eb82f542f7ffd815ede3884b40da543754
MD5 279710b30ab516e820c9569922f80869
BLAKE2b-256 1c058930e7ba445bb02f6a58ed91a742e6debb919384faa2ddf4347afbc1ca6d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 81e868f38bc67b635f8911e6cbbb11822049be477002db23d7c03624ecf6fd43
MD5 539cc796f473329c5b3d885e0304f16b
BLAKE2b-256 d29e4aac5b295bb64adea6a4008774630a21996f789da1049bbccbbec00ecd26

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7b78fb930bf1366540138fa52a26bfb3be6ac378d15f2f30bc52964ed77da0df
MD5 90d9f599282ff2c70124b78b0c3fe42f
BLAKE2b-256 81821b6cc55f3606eec8a6339b33d05fe029b5ec8308f337393de97cb7c93295

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d780338e52c617b9d8d81d2516a50806229ebc7b6f7c770718fef66d12c900c2
MD5 b63303cb681d69481d2cfbbc98cb1f17
BLAKE2b-256 edd89e293eecb0cd146a16c90791a716e7886af047c725cc5760c8d0abd2f23d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 d61ae2f3c56384c6a2c23bfee861717bd553481ce04187320418a9fd7c9ae352
MD5 617ecf0077ff8c511c8d5522dddeb2b6
BLAKE2b-256 8ae2724ca1ceb3be290a5adbba6ab7542f4f06dabc885bb14d7a45dcaedc8901

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 4eb3c9bf4a05730890675a246819307e65552282bf5b15de0c65f3c6c584d26e
MD5 a16a522e7fb044a4e73a1672513ee10c
BLAKE2b-256 73a78f6c54c8ffce86450dee821f473dd8c6ca5386c815655cdd5915c376dc77

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1999ed0c2beecc382a996a269262c739fcf550ec6fbbc0fd5ea98d61534ec4a0
MD5 a4be978334ae99cb9c84abc813bf0e03
BLAKE2b-256 7c4b78600517f247be46da453aaa7931555df8214c3f28d382ca96a5bbe368d7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 874b1dd4c90f7375117daab50a3010bfcfb276b7e8e4cf035471ab9ba3b776bf
MD5 db980e88ba5cf654af27d503619afec8
BLAKE2b-256 874ca207e0e7ad3bcd1cfe0b8d91425ce97d7997eb6ddffc03a9ccb237522e2a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8f4838c2aa010ab8c061f19c4b59e67b1eabc061dfa6f7392c9beba826525666
MD5 a3eeb19d21268f1f165b40baa15d140d
BLAKE2b-256 1f241f046d601e4ac1a0ee5e378e8942f6c4b34156475184ba1dd9c1c33959de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 8ab0490a1d581af1677f003f8323fa88a0fb43f23122c3d923039f8691ba8f0b
MD5 ab50bb3580d42b014a8e9beb9b10a904
BLAKE2b-256 bc1871649fd46178bee0878d04ed2c0410f1b21cee91b0b25e7f62d3bd62276f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 833f878260c99d101e9f76ca2d7304b6c6bc79546f76a7a22d0480bd4c922cda
MD5 ec734fd1beea7752e283c97fb233d4c1
BLAKE2b-256 6d8fdcbea1bfd1a46b2a06836a1de8e476960f6cc0f0e30633135e2349d90992

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 dc01eb562ae460c06af707a9761d36184504bfa1ae56b2e31f6084765452beac
MD5 605e430281ec5564f4ba769801b4ff91
BLAKE2b-256 e1f0404b330787e840580a86b2c42a4ed22ae44933d0fd5f804900f0fac38ecf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5119e07f63f86455b4d3894dba6bb9099dd1d626cb185a8e18f08b6f2a7fb52e
MD5 c8ff710cf34b7eb22be2a3072850c999
BLAKE2b-256 6ab06bd5528444cc6e418a562ea4d4523bd23c6c5d9b1875d19330df211aeeaf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 75b23612193a15cf1d95f91650e35f87ed6ed21cb8d18f00360a503adeff483a
MD5 1f72ac5454130863b032c749ca5ae3b8
BLAKE2b-256 9d3b1755ab373d873eb945e58e4d6a00ce8c2f354c28c466004698234241c491

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 96e2e83dd58dfcd46fea691f9858d0a8e676bdbc92202bd24bd03eeddb7cf8d1
MD5 a447c365ea3a80512bb3b4b79b060452
BLAKE2b-256 0c7a58af0c9a0e4cf7aca3fc0fc47cd323dc1a396b1cd748b5cec470d5bfd560

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 7fa0b0370333ea1245902e263e1cb98ac1897907c9fc016f1652bf4031195b75
MD5 0cc39a4f86d56d2afc111e249d64d2cb
BLAKE2b-256 912a58d7717ee0299985a45aa4fd2729c2d56d91b1bb6b3fff52fe6567789093

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ae85897c9028d44a3d3f42b11e3f8751687355b6f6f26d1f30b8077e6dd1836b
MD5 787012764ec8ca660af49fabeeaab7d4
BLAKE2b-256 1975042e9b28a91130936d8fde2655c2842fa284bde482c56fd94dd702c68bbd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e67d5f71483bc74a0959997a8fb02efb7321ff928d442294dcfbf3669c46ed9f
MD5 14179d21e2945f41e731e583bbaa4bc5
BLAKE2b-256 aa314674ed16e358dc20cd7e8858d74406e649fae7a13ab118ce692f1059f711

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ca13e9ffffda39d570943a95f26d0355e53ac0b17c2270c18375ca56e6d596a9
MD5 53dc8147843f29d603c157b9a0c22c25
BLAKE2b-256 5c006fe44b69fc35d8c6a364477339fdd96ea6f5dd337574ea0e7864af171cba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 67495aa0ae59822467037ea19ecab49ec270aa3ffb46784eff37335a7d3a12da
MD5 f677a68252fb3be1e00cd0a6c8ac7199
BLAKE2b-256 c818b388a9b280ed38f85d6915d58547b6942f533f168f2abcb8ddede8998a88

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 f6360f7aeed16eac751a675945c93a512da8d41b9c467139467f6530a7cbcda7
MD5 49f2ae526ab425a813deb1d31cd90268
BLAKE2b-256 360481de35a376903234a22e1d7fa42cd7d014d66e40ba7dd85438226a986561

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 bee7af17d5e7fc28b99d766b46b9507711e993f743a1736a6c14872bff253efb
MD5 ad0d8c947de59520646d42eac9e5bd19
BLAKE2b-256 ff826bdbca08647dfcd323e1dbff780d29cc5c924fd30711e4de17f464e20a7e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 368a4dfd9409d20fb9a095cb8a02fdcfe2dcd8b93606ee4cd28d0a54b11cb3f2
MD5 d9badef6cc9a72021905c9d157cac252
BLAKE2b-256 93c96c5d78c36aed77ebd5f79b7eafb2c3d0faf84b4afe39576702a2d8b7d834

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0a38cebba02e7ed74d09ab683cc5db9f0577cdf30f4c83b4d4ffb91a0dda425f
MD5 ae4aa15d49a3160f9e2d11107255db9f
BLAKE2b-256 450e3de6d603313ae315a9aa4ec42da184fa77fd92e29fdccf03965ddf50ef77

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 05a70c24071c73d44ba1c4eb33972e3adf65c5fe8d38e0b7856d21a9079ad6df
MD5 78a7238330079d74269b41ff3d276176
BLAKE2b-256 34dd373563c338283a5410aee043f5fb518a0ea33d8b34166d01387f3bdaddda

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 2aed236b4009beb1d73a584d6b62090c40eca6864359ccfd32764aa026589609
MD5 120a61248185db1f2a0f1316afb941a9
BLAKE2b-256 36da76815c31f2b489cd35959565d2c5d65c279e413993d484735821aeb9478a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 60d59d62bc8906a74f168ff71f19691d0d253f01aa0e933fe47c1e59a3341303
MD5 246980419b77aaf53f8ea7d529b625f9
BLAKE2b-256 aa9358a8c4c4574e2691e5c58c6831d4e3fd7099b5c50cf9360ec26e1aabcee0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8063c141079243f3bc23dd0c32e3b4c07ecea8b155fbc5698b9e0e2dfc44f1fa
MD5 5139e777244b0530ecb613ccaf5968e6
BLAKE2b-256 e6e582945b34582a1aaa90c40efe3a173287e3ad44fda95fb060ca207f15f520

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b6136fbf29921d048c00ad9bf58f6ee0f960633bed03159472a0c23763ed4869
MD5 814dbf85e1ccfac51a38cba55308e0d6
BLAKE2b-256 843e4abfc3394b48dba942b0ca3b484858c69ae0aecc8093857cf94d58a6d936

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ac1970dd2b1dcbb388a0c8f2487f55b2235f2fc87313ffeef76c92ca253629db
MD5 3067c74c52e867c8328f0e27067ec143
BLAKE2b-256 258b0c48cd01de86009a2d55c1bdb03e9f0c648ab84c45220f560bebed549cf8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 658020b4f24c676560f558250fce8b1e8e44d1625cf6d0f83ee3d5a81fb1febf
MD5 c468787c667a5ce1231011759fa6ef3f
BLAKE2b-256 910e7d69fc381004db21fca5891ff3ffcb17d7b48ef5cc1e565899eb376d9353

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 92b2945c6d887c45ea9c8837e5b35aefd166679eb954edb99c6a92f92e38f8be
MD5 f0233b9ef4297a99b75af925384bc0a3
BLAKE2b-256 afacf342d6faa88fd6230cd6fb118a7fa9d57c05d1a42bfdc4029aecf55f0fa4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 075ed736ca676ae7cd45f79c2ad8e3f82ecb093830ec276bc3e705a27aa4ded0
MD5 a4f4cf3f7a0b6e033f378032a2cebf5f
BLAKE2b-256 50af0fd42e6d4df69748faf9a2ff1de62001ef52d41513b6d074e94ede75d8f9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1db946a4355f72ff678708ddcad57968e19530868ede33525c7d605baa0b3797
MD5 6472452f4bec4d7ddbf19e4aaee99541
BLAKE2b-256 1137628016215c129ab8c0c01a8e19f5090890b227d3ebb577c1408c1c332247

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