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.6.tar.gz (27.5 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.6-cp314-cp314t-win_amd64.whl (89.7 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-1.3.6-cp314-cp314t-win32.whl (73.4 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-1.3.6-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.6-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.6-cp314-cp314t-macosx_11_0_arm64.whl (85.2 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-1.3.6-cp314-cp314-win_amd64.whl (87.5 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-1.3.6-cp314-cp314-win32.whl (71.9 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-1.3.6-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.6-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.6-cp314-cp314-macosx_11_0_arm64.whl (83.6 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-1.3.6-cp313-cp313t-win_amd64.whl (87.6 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-1.3.6-cp313-cp313t-win32.whl (71.5 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-1.3.6-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.6-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.6-cp313-cp313t-macosx_11_0_arm64.whl (85.2 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-1.3.6-cp313-cp313-win32.whl (70.0 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-1.3.6-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.6-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.6-cp313-cp313-macosx_11_0_arm64.whl (83.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-1.3.6-cp312-cp312-win_amd64.whl (85.7 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-1.3.6-cp312-cp312-win32.whl (70.0 kB view details)

Uploaded CPython 3.12Windows x86

private_attribute_cpp-1.3.6-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.6-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.6-cp312-cp312-macosx_11_0_arm64.whl (83.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-1.3.6-cp311-cp311-win_amd64.whl (85.3 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-1.3.6-cp311-cp311-win32.whl (69.8 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-1.3.6-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.6-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.6-cp311-cp311-macosx_11_0_arm64.whl (83.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-1.3.6-cp310-cp310-win_amd64.whl (85.2 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-1.3.6-cp310-cp310-win32.whl (69.8 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-1.3.6-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.6-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.6-cp310-cp310-macosx_11_0_arm64.whl (83.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-1.3.6.tar.gz
  • Upload date:
  • Size: 27.5 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.6.tar.gz
Algorithm Hash digest
SHA256 113e54d42faf68dfa2dffe47697c3b37fec383ce04968a5d0849af6b1d95e3e1
MD5 c9d8c393b7084f7ed3fa291892a10a4d
BLAKE2b-256 51e2d837c2a4cc8220aab78753d65c9cfec1183c8cd58db579b0d5cc810d2ae8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 a5f1a2788d1c740bf7d10f39db9464572a3770c0f8bb86295f3b5d56e075b97a
MD5 9dd93107374520cd02ad35472f8e80e7
BLAKE2b-256 1342f609395cc6b8c00121d0d2f55f0966620bd253a46e980bede4efd244a57e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 c4f8cd8d1e9b1bc056d4d5c028d7f4042c11fd7731619098010fab87ced14a30
MD5 0274df10730bbacde1d93af4ade19154
BLAKE2b-256 c8e0d69a3ab719f7a93cd4f9558f788f93a2e923db3028b68f43f829c614eaa2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d8483632bdb0c63b29871db35fb887a24512746043a848e74c4d08cc6aceb705
MD5 30e6ef121a9ea42dcfe260047969e0b6
BLAKE2b-256 9124a9274597dc313a2472a321d31fa1eaa081f40cccbd7b357fcaad48b3a225

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7b60b4d9b905d005f5fdcabdd2b1bdd9611209f9337150bc00a733d12bca3407
MD5 7e9c68d9c51cd728a0fc3a4e3ea169e6
BLAKE2b-256 16fa791e8db201f39548a7d91c2b9b4804d6f6977a94f1ea38f0cb05086547ea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 aefe8c7a2a11bee75249707830a1c2393d1220a2dc0e7d73716b3d85974222cc
MD5 cdf58a09e098b2c135b955237bcfeef6
BLAKE2b-256 470bae21c1488e2ef4634b9485b3fa2e49946c96996d313100067ae75ffb6fe9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 776fa813c4c81ab2a00811c38b51e606e59abd4a0affab250116ca7a783ed051
MD5 0271adc413a3cd54c414650a862f81a4
BLAKE2b-256 d345ad12b024d4f31a07905b1ba31b171de2eb4150ae3302a689fd28ea3e00ad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 d4f698caad76158dbe8ceb4e8dfec9133e36c3053f4bb421eaf6a8edfa2eb106
MD5 a8224a918ef6b9c8193d18f59844e0ce
BLAKE2b-256 0bfa4c8ea715f23034fd46c8188cab690f625e9399d307aa7925f981a0e0e67a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ad42d3097f845d8b84fdb4108888fd4c21d2d69e76e4019938628e9402580832
MD5 0437dec4440193fae3761f95290b2c17
BLAKE2b-256 f6587e0ffba994d1c7242a4195d46ef7d7f2cbe49372d67bcc69f11b02b0049e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 eddfc60cc221b6d6a6badcbbdbc76f1a50bf79177dc073037e6acf2dc1e8a68c
MD5 133d9170cdeba708069f722236983601
BLAKE2b-256 cc20006fcef3010a4d85219e4cae594e98850bbb2fb8057f2394e619079fc180

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a0a8bd66b03d4eb795b90bfd1110a0b9e2c4893258b75233cf36daf67ce5b107
MD5 fe3ab171f4729170c641625b93eefe96
BLAKE2b-256 cda98ab9cc9ba9a83ddf5bea775cc4848aaecaadc4abd87dea3cf7ed2f8d7581

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 f7d92c49432aff826b3c5b55d4ded754d9bfb03ab34c0ac53401f4046aed0357
MD5 d7150cc026baf140cf8dae8716cf5215
BLAKE2b-256 55d6b02ddb6661fd70212aec7fc08d46560517e4ca7b2859dc0679b901c84c95

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 406d89960d8cec224fe8f0bdbcb3da27d3bb6158099b57adae376491af74b61d
MD5 188ce2bf33d2992ea7150abf607e28db
BLAKE2b-256 0e66c3e1b237b701c9b844c9aa225800a3dd4fe070582c5ef5dda51bdcc888a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8d79f5aebfefd3ce57317ae441db36f5fb9458b5ef9a47a0eb7418e8d5aaf64b
MD5 ec2d144c467b018256d2e59fc9993372
BLAKE2b-256 8082f91ea09e932136197eb2ece4c78669f8565b56ddb568a8da402574b11a64

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7c6611ff7f4ef53cb4f830d17c016ef0eae8898daf881c51c3e7f05001189119
MD5 ba3cbb348b6452e0167fbf4537627d01
BLAKE2b-256 f36f1638313b58070775df8184b37d441188c30fe51e15d4b6398ad9c8ae9e0f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 39fc4f1ee189dcf707358c27d0c430cf6254fd135e9abc97f28982aa46c4d12b
MD5 80d5942578f8b06066398f5e3c625255
BLAKE2b-256 640a437a3b499bc342714df24ca704aaab7a0166b5c0332f6fa66ebaf8b36534

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 68296b748954d3871766903ab9d6d37183db6973007011c89bcaa4651656534e
MD5 80241178ad607fda3141c245b347bee2
BLAKE2b-256 78e5ba2b91c13bab0b2451ea5eafbd07c7c4e7e3665d9b6024ebf22581738fec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 34c2e3c8b91f8efd61f719567d6a8d4f1f09b59e3aa783538b9d058e2aab97bd
MD5 6172cc2da22b54294eb95113f802a278
BLAKE2b-256 86339f3ff02560e8a355d6ac66fe0436ba49b80540e3f7352f286f506d126098

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 afcaf9e5fa0de426bed728f2ea0814a040b2731188a8c4b536c2eb2e8cecf698
MD5 6596979edbc4efe92d38c4c86d782306
BLAKE2b-256 3fef565445e4af25c86ba0d16370538e944218bb3f94f11070d7f4559cdccfbe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 12e7cbd28a24fb0345e17940b0b2c699c87ce0cf1f01262da7a81134373c9fc9
MD5 2b6ec952b3de502774d74f0d0131a5cb
BLAKE2b-256 bc1057b411c8b69e2b6a4f8031c0255dc7f28f2da2aeb7bb623acdec44455096

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 18846e707a44c837c03e6a8a83320651ca78f3a8cae430998c7dafce5118fc71
MD5 9925f8f8dcf787abd7cae25e28b5f55c
BLAKE2b-256 b018af08327d4e5f54c6a0470950329828135efa7f48ffa53ee35a3ecf9fea1f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f1c6edcbe39e2e4bd9b9989e3cdd8581b0ea50333dfde2da4610e120d1990b8d
MD5 4c33f5d048b7bee41cdf8791d45e4c84
BLAKE2b-256 1e4762ed26b3d7d1e4d4b6137e70e7f6a4b1af7c134597af5cb49eeb268b74d0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 b31eb1dad2acc1c0581ff178a5b452e3a27f3b72abd69a945fe30068e509529e
MD5 db587d0a8149d9163b4d5cf33f141162
BLAKE2b-256 22da93c6c268bb468eefe6c77b791e90f32c3813e4f7d84b7b3b260eb3a9d377

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 06bacfe4be37eb84aaf37f41d5ad60213f37febd28e7e10ad703ba799555da36
MD5 83a7e9d57d5ed67f93a67cf7bb02d676
BLAKE2b-256 fd681e4974c3bc70bc3fd2500df1ed65dafc1820f2fd96a26a4037b39a67777b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8fcb2724a0b08a28fd666a0c3f877f95641955e567f422583c7c940c91ddf5b6
MD5 9877ea79fea6bbb4072194573bce1049
BLAKE2b-256 a52388a7969b0b2a740e8376855d5cc4f652090e08d296305686e02b16456c98

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 efd14633ba76730cc13755e7f556d6ce95467a7528f1f0b32db79854d207fbcc
MD5 b096a37fe444ce10985370a6c099c9be
BLAKE2b-256 fe2795d997329daaf729cf17381747e4e4deeebd0ca5f435a9d1929a428d88d7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 fb3585b6d15fb4720bfdf17c4ac0c72d4d95a942eca5e7c4edbfbd8a885e1fc1
MD5 1543588eb47e8f31b9e21c02a7a4b0ef
BLAKE2b-256 14c2cf10d1f8aa724b490566c913a4f0911d325c32037475d0fa7e4315bcf6c0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 b82f916208b71ba2d18c00834fd42ce883e2973115233da2dfa92fe7096e032a
MD5 e63158fd08a004bca62316e3b8c34f85
BLAKE2b-256 942664621068d8c1afc1decc967dd6216640f9d9d53296313df738d1a740acbe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2b2aa5ac8eabef834be8477add2a7cf9214330469c18d19e614eaeeb8c96828b
MD5 c3ed0cb8e2d0ec3f58ba2145f4fa470c
BLAKE2b-256 45068010a663f7c28d4c395a0f5cc56771913ceef6be9261580e2b056793df04

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b7e460849f547c6563eee2c9f6db647f444c9c67e775eb74585295b77149a4e7
MD5 25d16541cea09d8ebd0f1462f22fa152
BLAKE2b-256 8f9df9132c37c2fce21448c80628e48e953b90a1da35a1ac46a8dc21669b760a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d73f3003a4ee05d5be9822bfadb0823ddf2b903d98b57d3ce1e49c005afc1fc4
MD5 8c7eb0b913a50db37daa067924d24b82
BLAKE2b-256 ed48e42e2a63564b27ba12ebe35a9d473c7d88624e4ae42eb130ef0dcccb910d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 03b5d60b8e40cc260f98fa4b9ec7e8bdc29aec3fe30968f46501600064962193
MD5 a96e7bd5646121dc41165b9f69fca3dd
BLAKE2b-256 06ce7aa28fc4c5218ca0d3002cc364ddc116758684a6bf7c673786500291e914

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 98bddb7abf40b665e09af2077b021df9fd89e7952c6bb7511f0ff9d45acd459c
MD5 7e29bcd6824514047abecf221df69cbe
BLAKE2b-256 551a99bc796d93fdcccafe07673491aff5c4c4209d6790f59cd36f36b93bb40c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 dce0e2e973fa02f9c087b1b5ad5c29be8bb2865644000e463890e0c26eb995d2
MD5 63606caa3646e1dc9f04e02c3ba39832
BLAKE2b-256 3a67d7fa06053dfd2e2f3e09830f4de82528f9cfbd49661afd22324c5235c55d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 86b74dc2e49616b24c02c6153bb0d499b6fc3cf66a0e8780eeb1989eae7b62ee
MD5 8e2f7bc9a9998bbffa1d2415b8e08eed
BLAKE2b-256 e2d6286f4aba3abf51c1a644056c992263202b49c828baca59c5085951b5a722

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-1.3.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3c06a23af46dfcc47f022a5d9359fc9dd139e8a01800bfbb2974161ef878eba4
MD5 208ec8cbdc9bdb2154a6138d6487bd42
BLAKE2b-256 0144cfaf6b035029b05181f11a0139c31bab1981b6463745cfc3dc2796f3a87e

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