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

Uploaded CPython 3.14tWindows x86-64

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

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.4.9-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.9-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.9-cp314-cp314t-macosx_11_0_arm64.whl (82.6 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.4.9-cp314-cp314-win_amd64.whl (87.4 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.4.9-cp314-cp314-win32.whl (72.6 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.4.9-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.9-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.9-cp314-cp314-macosx_11_0_arm64.whl (80.7 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.4.9-cp313-cp313t-win_amd64.whl (88.0 kB view details)

Uploaded CPython 3.13tWindows x86-64

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

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.4.9-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.9-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.9-cp313-cp313t-macosx_11_0_arm64.whl (82.5 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-1.4.9-cp313-cp313-win_amd64.whl (85.6 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.4.9-cp313-cp313-win32.whl (70.7 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.4.9-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.9-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.9-cp313-cp313-macosx_11_0_arm64.whl (80.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.4.9-cp312-cp312-win_amd64.whl (85.9 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.4.9-cp312-cp312-win32.whl (71.2 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.4.9-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.9-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.9-cp312-cp312-macosx_11_0_arm64.whl (81.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.4.9-cp311-cp311-win_amd64.whl (85.7 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.4.9-cp311-cp311-win32.whl (70.8 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.4.9-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.9-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.9-cp311-cp311-macosx_11_0_arm64.whl (81.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.4.9-cp310-cp310-win_amd64.whl (85.7 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.4.9-cp310-cp310-win32.whl (70.8 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.4.9-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.9-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.9-cp310-cp310-macosx_11_0_arm64.whl (81.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-1.4.9.tar.gz
  • Upload date:
  • Size: 32.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.9.tar.gz
Algorithm Hash digest
SHA256 25a25a08f97ae3d3230f2314103d9044cc845824f22af148d9f6df08aa88eee8
MD5 dd9848c4309372fbcb451ca6fc17b1df
BLAKE2b-256 ba10fb33b727e808298bcd7d15bef6789003fe7d71715cf482e4b28e4501a78b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 f0da6c5b9004c121de5cc0eec0c2c51699ec79cd3fc9973ef1eb6023f5a0f025
MD5 ddb72e6292e34a5d1cd88c53efc849df
BLAKE2b-256 75a3d25ac77cee256d1d174ceb5ac80de00027055e447054594de5056d0fd95b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 540f79a4075bd78aef274b6d07ff67cb6efd6cee816a522b70d976905f014853
MD5 c273962a9300aefad5cfe59c109d72b2
BLAKE2b-256 b244a0479806db05e8b834557e50610bb59e9319a147df94fe173543cf361025

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 62a6add15f854c2381f6a29258d8d77959a1aa4415e898e34b60b2652d0b7237
MD5 a743a518799e16b4640447b668647336
BLAKE2b-256 22f9784b90287ce331a1ee41f10a6cf8fb87416e683b05a72f996359345c3a07

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 634da2704a9093c3e240b1d3c4686d1d9b80cd1ab88e4342ab2b8e92a054ff0f
MD5 e948e6d07f686df7fc92e5d553bc9a7a
BLAKE2b-256 2e9b721c464e75243839396f54353bc8071ecf1294eb1620fbb2f90b8d69fc30

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 29b34d62293395fbe0ffd47e66c1a921eae593e05b4a6517c192b93351e36a89
MD5 77702cbe3db1f6f504b4768ac27a2872
BLAKE2b-256 e12308b61cce961128ea40b439611d81764f71b76e0fb97c4a0f4dda8953a91b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 720de61fc0bac485ae015f6256d68265e5554d7066d4a8bf70ccb6d1ba38bfcf
MD5 8203eaa6ae4d0eb919fff9b9db73f13f
BLAKE2b-256 248bc39629fef5f9b96ae44d149cabd2bd5d9312e04883905a5ac7ff2e049166

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 45bec1f4fb0c001d305c332e8b900ede507771cd5cad861e06945ae609b12cc0
MD5 9b0c44955564d20d360875ea3946f740
BLAKE2b-256 c7a1988f461d6493ed83ee879f4262098998591def86fbdd512d661548a5c50f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 060c752092ca33ab78e3ad8dc60d130a03d47ef28ebb6493756a517182589f6b
MD5 6bdfc178e6843bf7944f83ed9a6b360e
BLAKE2b-256 cc0e25bb1f5a5e4dfefb1d83cf442db2058701b3370f13ecfe6023eb2b165965

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 de07296abe6929736b1a7fb1728d2a1b16ee504d741b114a7ed1b08677144298
MD5 894a9cfaa1ceba8e80c84786e522f284
BLAKE2b-256 fdee49a7d56adb994b61bd7742c2271bb9a0e1f7f243bf307632b4a9be0ca08f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e82115bdb9d18913be73f84c60e14111c91c86d744470f42bef0f9e4a592ab87
MD5 5d23ea077b0ca111b3e231f001585c0c
BLAKE2b-256 7024cc6d90d920ba8215ebde3fd93fc358b9a2da81701e973afa29b2b6a287c9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 be7423d1ef4ebb350aa900738fbaece11e6bebccf26cb43446681cc644455156
MD5 979cae1f020286b07ca615799bcc002e
BLAKE2b-256 a0272ab38e1cc79e4e898cc4857368b4bcf690569bd46eae263c51b7ab9f8fba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 b4daebd4f36a1fad9e0bc3278cc3f6584d638b90408a70deb9bc725ccfdee879
MD5 0e4ad36b5640ed9592cdc80c577094fd
BLAKE2b-256 ba67f62d82c5d57f90c7e051f628d69c5885859b2cfcb737d6ddf6b7fe80d5f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 943431d84afb4c17d5f810fd82cbba05df980ffac761055273d5b1326f9910b4
MD5 48bfe5b15afe0e321d87f00ce063f921
BLAKE2b-256 0f43b21b82972c8279d020f938e59bec94c55f3381925e0392a20a1457fd36ad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 26c5cede3bc3fa1ebbe6713d11b8e82048f0ef109bb88abbe66218f40a0eeeb8
MD5 470bc87a7b3b80114ce534830048a4cb
BLAKE2b-256 58d8ab610d79f149e94e0a39ff12348d8971d263eeb92f5b72203450525a333b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5c89f00864a4de9b2073964687bdca304191934104bbf14e8d7dbfc222bf3897
MD5 d4c767f8e5cd594c56f4afc6a449aef5
BLAKE2b-256 0aec0652b5ff5aa8772be3e648363d675e655de237856cfb61724c33b6120457

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 b6dfc92a28705885d253eb2a08be3b26ced6a9e6b9c324754f8699c7b2a76b48
MD5 7f9e64ad69b52f6e7929d0560a104c26
BLAKE2b-256 50820c9ff2c456cf9a17efceb2f71d2353ce2fafde4b0510b6dd3da0fc6ff3e1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 480fe98c1d50307d7d898f7a0c5c08d73b0732d40587999300ce9dd58e4c127c
MD5 195422fbc7bf5c3496065476bd7a2dcb
BLAKE2b-256 ac4397195cb20105350a925a70d199345df350d14ea8f36ac6da22e543926501

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c742229ebe777244c5d4b9faedfab20be92202185e78a9dd277355fd976201c2
MD5 15094523c140c3d13646696b86ac3045
BLAKE2b-256 ce32ca86d069c9a08f92ea04ea97f4d3db405f18fa23e9baa3689b2597121fea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ec9c10c168e1c8135b50205c7e186856b1760e0fc8bcda121561c1e4005378e0
MD5 fac7f463ceb1f016032c2a6d2bc6b45e
BLAKE2b-256 77c07fe236c522a4c9907c1f50e5ca12a034d4baef6ce7a6b4968aacd330af0e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 327e1ba72c0622a9d1681df4b5b6e795bf2d62624dfd72c4d14f0b5d5d8c1203
MD5 414c380b351f329bbcd18d097108bf45
BLAKE2b-256 4a442bab43640ad802e65d415674ad39213fceb22330d05d6dce3392bb1281d1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 10e423b3e62733d9a7fc0061bb93766261e8fa09f28a395efecd1fe277b2a16b
MD5 1dfe637b3e393fa442160fcf727ce035
BLAKE2b-256 14de6225eab2929f9ec0fdd88f3f9edb0c37d0429a643f1b4037e6c36feca8a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 022e83f94958aec12acca15762fbf45f1b3f8c404ecdc0283c8d683f758920b5
MD5 74fcbbcb856becc76c611db381f56427
BLAKE2b-256 45d60c95f5c1bc4c7a2b07f809be24ba4959fdc4d73f652754c234c28f20df1a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e492dd8f4d521bfcd5d2ba89801fcdf5ad979de675231aba61d55e2c12d9a275
MD5 ef12b7cf399d8c07d7dc9cd7fb64c94d
BLAKE2b-256 f630f68e968a91442f94a8519d5d85115a89543ffceb40b99f72df2a8a03c140

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 74ea5b63b282bc92ae73c8f05c25b133c303bdb010fad3c63380880c8275acf8
MD5 3003af52397f7254a39cf618865b0f25
BLAKE2b-256 cbad8afdfaafd3a32b1e7031d7cac51bdd880c8e1c27a4421ac6eb761b9d8229

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d56f3b97c51e7417d34a00754e71381fb992e5abe9170de4bd025eaa4228c286
MD5 9f2f1ea2a2649a03939390de7025c8bd
BLAKE2b-256 53ebd86c98909327288784b61d7f0f4917557124397f55fda8e0f8218d41c933

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e3c05b872ab63dbf9524621b27e18e7665754ca5e150d73153a5f1dc64fa860c
MD5 95c975d2aad24a902dbe53d665782ae3
BLAKE2b-256 92050fee6416096d4389450a16e228f3921184ad57ca464c821d8c384f540927

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 84046e7aee8d1150b0e94d982075bcfa651cd0c7d04e08115523c3133dbfc24c
MD5 4b6add336d4e738b337491b7b46ead7a
BLAKE2b-256 eb6ad7d443aa0bfce9712779de9f1391b4050268a5e4dd1610314671b60d5a06

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6e61a39357ce1569cb5660f04e5f70d1aaa90658a1df236a9cfad1ae3c11f008
MD5 609694be892d648198d385da78913510
BLAKE2b-256 2eb8c87be7853f6151132be03e6b1f3c410ad8db9709436e038284c1506bba99

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 31d3eb29b42b9721fa1e846191d87fbc3d25c77f91a758c753d77e0d16cf17f0
MD5 800b33f70691ed3e1c4c7b886957df47
BLAKE2b-256 d6f077a636ac22e52a481fe96c4033ed3d294150c92a7c4ea4b8b0fc9c0f0550

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a33263f4c46aa7656142707d2fac025bd74a8efc205e68614a827669c149cd93
MD5 d1a2018c84ea8585ff83b14f98f20481
BLAKE2b-256 86a6fcd871b68ae00f7e487be6acd238393ab331f395b97a1b51beafaf54fdcf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 5ab8be5ed18ff744f748a5e43dc2aaaa60b06b2b7634eea5e1f94b60f74fb926
MD5 a97e614bf19532390895234882035d50
BLAKE2b-256 932c2f7dc1a62b0af2e262e46891e757204113e135778995110ddbe4e5a8d5dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 af3dfc9e14264a1716c0aa831d2d57f2c6e57decd249e4ab24ea8e073bc42e37
MD5 87b95457c1dfd5c30770e083cd1918d5
BLAKE2b-256 16a59c185b77d85fcf74e59fe639d338b0040d27a8fd68a1ef3c5d19250d49e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e4e8bc98578006cdaff33a9a936c5bf4e48092c0a96873dbca1dcdd23e454133
MD5 5071a0e7eb4f9914a3fb546410129ab8
BLAKE2b-256 8c8d67ec981718c2cfcdc7e781a0f98ad5f7f59e7b95395a51f9c8cbee33df80

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a7e832c58cdf08af42f9db9ddf4587796380c862ec5f823d7287651e5340f49c
MD5 2a9ba2926aa920095442f2a47eb82786
BLAKE2b-256 e7322044191ed8b2b944d97247f75c63af46344430c50dc5af40015d33def6bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.4.9-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 68525533369061efaac9a51f4e1906a94430320a7460dac9ffeac8531b0d01bc
MD5 9b8c0204b8a95a134a5af024410fd44d
BLAKE2b-256 bd0c6a8e9c224074b7c8962594b7e531fdd297d592341576ef33ebb24bdab3bb

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