Skip to main content

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.
  • Don't use a decorator which will return the _PrivateWrap in PrivateWrapProxy which will raise TypeError.
  • 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".

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-2.0.3.tar.gz (32.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

private_attribute_cpp-2.0.3-cp314-cp314t-win_amd64.whl (288.5 kB view details)

Uploaded CPython 3.14tWindows x86-64

private_attribute_cpp-2.0.3-cp314-cp314t-win32.whl (266.0 kB view details)

Uploaded CPython 3.14tWindows x86

private_attribute_cpp-2.0.3-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-2.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.1 MB view details)

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

private_attribute_cpp-2.0.3-cp314-cp314t-macosx_11_0_arm64.whl (83.7 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

private_attribute_cpp-2.0.3-cp314-cp314-win_amd64.whl (286.8 kB view details)

Uploaded CPython 3.14Windows x86-64

private_attribute_cpp-2.0.3-cp314-cp314-win32.whl (264.9 kB view details)

Uploaded CPython 3.14Windows x86

private_attribute_cpp-2.0.3-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-2.0.3-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-2.0.3-cp314-cp314-macosx_11_0_arm64.whl (82.1 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

private_attribute_cpp-2.0.3-cp313-cp313t-win_amd64.whl (93.0 kB view details)

Uploaded CPython 3.13tWindows x86-64

private_attribute_cpp-2.0.3-cp313-cp313t-win32.whl (68.9 kB view details)

Uploaded CPython 3.13tWindows x86

private_attribute_cpp-2.0.3-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-2.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.1 MB view details)

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

private_attribute_cpp-2.0.3-cp313-cp313t-macosx_11_0_arm64.whl (83.7 kB view details)

Uploaded CPython 3.13tmacOS 11.0+ ARM64

private_attribute_cpp-2.0.3-cp313-cp313-win_amd64.whl (277.9 kB view details)

Uploaded CPython 3.13Windows x86-64

private_attribute_cpp-2.0.3-cp313-cp313-win32.whl (257.4 kB view details)

Uploaded CPython 3.13Windows x86

private_attribute_cpp-2.0.3-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-2.0.3-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-2.0.3-cp313-cp313-macosx_11_0_arm64.whl (82.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

private_attribute_cpp-2.0.3-cp312-cp312-win_amd64.whl (278.0 kB view details)

Uploaded CPython 3.12Windows x86-64

private_attribute_cpp-2.0.3-cp312-cp312-win32.whl (257.4 kB view details)

Uploaded CPython 3.12Windows x86

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

Uploaded CPython 3.12macOS 11.0+ ARM64

private_attribute_cpp-2.0.3-cp311-cp311-win_amd64.whl (277.7 kB view details)

Uploaded CPython 3.11Windows x86-64

private_attribute_cpp-2.0.3-cp311-cp311-win32.whl (257.2 kB view details)

Uploaded CPython 3.11Windows x86

private_attribute_cpp-2.0.3-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-2.0.3-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-2.0.3-cp311-cp311-macosx_11_0_arm64.whl (81.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

private_attribute_cpp-2.0.3-cp310-cp310-win_amd64.whl (277.7 kB view details)

Uploaded CPython 3.10Windows x86-64

private_attribute_cpp-2.0.3-cp310-cp310-win32.whl (257.3 kB view details)

Uploaded CPython 3.10Windows x86

private_attribute_cpp-2.0.3-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-2.0.3-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-2.0.3-cp310-cp310-macosx_11_0_arm64.whl (81.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: private_attribute_cpp-2.0.3.tar.gz
  • Upload date:
  • Size: 32.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.7

File hashes

Hashes for private_attribute_cpp-2.0.3.tar.gz
Algorithm Hash digest
SHA256 09b7f4b41515cba82253dd2ad93bfe4aa1a89e4d9e7dee1a7f9bca2cb8b293e8
MD5 b6bd72cd5fead997309248fe6bae6e3d
BLAKE2b-256 5c17e97a616c0a8bc99767695bbbf4e067ed3ec889364cc8b97df7f058cbc5f0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 68ce1fa72b5894bd9316629eba1106e8b4a3a62434b85865a7321c6ddeacaa74
MD5 c43efa2147c0bb508b3e5093fd8f3a83
BLAKE2b-256 e35a66533d0aa160a6e11390b11d642b8085121f297a507abb93c62ba04013f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 ac0084b04290dc14e5c77f4154f72e1b373d56dc20e527d977195303f96a11f3
MD5 b566b2356d50318010dc1ca06bd5a1d2
BLAKE2b-256 a6ebb760ac317d138e017cfa84f4a043a0c5d8be03c262c0c458792b6efae51c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7f35514896b24137eebce710b01e68f7dd9a8893ea4765c19153003935c344e6
MD5 d6bb892b5b3875512eb99a96d65d747d
BLAKE2b-256 5eb0129866f62b3e4f354237f3c56c3a6cdff91e6d8a99ea478d6c0f4c527461

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 56cdf661e298736c3314a5c35aa71bbb4a7b47ce7be5df3efc832523a5d55332
MD5 29206abdd0f1a20eed5e01fd00110edc
BLAKE2b-256 bee8def7c1446881efd1d747b8cf9a84db808ef97e457c1afd56081bbbe57a5a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f5211f24e1d1201ee5e1b6e9df897d2b93561e5206ec38d991898a969c893740
MD5 53f2327cfe1f32c2aa3e94231db4c8f4
BLAKE2b-256 878fbcbde7678d0886d31e84dc18107694c77e5c5685c15a057f0c349eaef68d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 0b100fac155a9c0b79bba77ba7199a2d3cffe2acc615ee1bd04a20ac5d319e20
MD5 766827ec6464cc46042e9d2e7387c9c8
BLAKE2b-256 d07ce18263c95d0584a494751f732b3d720be5a0228f0a5b1f9567aaeab41255

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 29d2a5628df67ac0e960ea3e41c4b29a91ede269274fad0f436870a2b6bb6ef5
MD5 a9d60e60034743e9aa6e8f5d83983a58
BLAKE2b-256 f2bd340a88580b68dc9a266bdfde66507259feeb0316d83b8511a079fc468f75

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 afb04439450ad3f43fcb74896b2ffad46fb0098797d06e5d8f50578bb8f2b018
MD5 98818048a2971c3e1dd19642e7d5c03d
BLAKE2b-256 a71a1d2ca70f1fd27bf81d4340cc3dc6227fd38c64b3155201688fb9d8f5b494

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 aef3a6542649ce86bbd9e79961584ce3a9452a4d04056152ae4d366bfcb69ecf
MD5 e9e2449e101256db845e0b2615a48db0
BLAKE2b-256 3f971ebbede49b867b3d223b755f7cb65c5083270adab4edf7f56f5426ab4cd4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ae3596807fa7d46a2344881af64a4e9c2c8656c71666c43df7e95605736a194c
MD5 59fd14ebaa4f3df4d354efee2734e87d
BLAKE2b-256 92fcef5a0c72aaa036d839ed4fdabc212decde5f17a66b21e4c5d27fef5c46d8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 f1c619a3752f445bc15553c7b0347c194961cd6dbccf6a0facae0a38dab30f55
MD5 0e3060d34c70718afc618849060e419a
BLAKE2b-256 7cb00449a93cb490385df6c2c91af1e8f94db20a9fcebb33896e339380972c22

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp313-cp313t-win32.whl
Algorithm Hash digest
SHA256 d837ccd627b5d30475f929c6ea830889309656a0da80ae8f3bda3674fe2306a6
MD5 c8240ccfad7c7590f0ecce616bbfa50b
BLAKE2b-256 33ce5c781c94e0cd19ac07a62dad460d89f61db1cd2217b3901e1e9300966b22

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2e8cebb59a05aa070df8c79a9834ebfa83bd0e1554f3450a438e0741d2b82084
MD5 09a2b921174893e0eddef0bb87a2568b
BLAKE2b-256 dcab8179cd17c6a0bd255fb228328338371c47735a798761553b69dad3d5dcb5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5c9e576785410b0efb09fd722781b947a6f8782d79492f4059f4aa1301040825
MD5 529f0e501026e35908a3aea455b9009a
BLAKE2b-256 f0d16c7fe3f2f614947e55d73ee6fde759f49bd9ff9892155746e3c259e2667e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp313-cp313t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3df2f937bac5379793011fedfeb1d2399c3b1d888cae81a24a3bfe2373395ba0
MD5 202a0112614a8f3e39d81b194eaf5c76
BLAKE2b-256 40d9fbb9e949756bf62598816633ec51d86b497ff70e61b174e9be80de9e418b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a7d760d8b2a3d4a750817d540899af5567fa5742800e01428c72509f399dee85
MD5 34c3dc069df09930c2fbc396b0748883
BLAKE2b-256 071112f58e44daa8c9cfe0637277126f2afcaf454fb6c4d09ebb708ebb35214e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 666472f3c3e43c620894544d2ada04724d017006c16fe13a3596062732fd8a32
MD5 c2cc6ef87d024887e550639ebe819a08
BLAKE2b-256 08f9f1b388e6a061b67ae2963ec9458c2e6f1f6038d59e53089e53d8d230e658

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7c8c9aa545e62cd6664abe36ea1fddb834cf98b6619bb993e124b4c2843bf14e
MD5 b1fda824653c518afb3c31b3b457d6cb
BLAKE2b-256 1ce9b79e63473c31684856eed700f97194e6ce4588163f74115b2cb61f2cba9f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b22ec34f9a170b88df77759f981abf275cd8c820bb0bb0e0dfce8325b3d021d5
MD5 d4184f0b20460d2b02e683b36b8f9607
BLAKE2b-256 cee1e678a51529b6c594f615742734ab2990c9c55b53a876ea8c7e79cf8ab5be

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9d375514827d950e8fcc3da6f959af8a8389da2e1050cc1000e4167695b81c16
MD5 5599003c5dd9a848785aaa49b47abc75
BLAKE2b-256 11479e6d78b13de4389a187d1c5691e332aba76173bba6dea454277331fa7f4e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4192d65ad9ca62963471f0cd78484d70cbbeb033103878c51c7a93282e0dfbc0
MD5 8469d6c6c4533ece2b6eced4fe4acbb7
BLAKE2b-256 c458a5680c6092a1e67d0aa7276e35a1f124e1633bcff004249998fa598b7e48

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 c2e15a3336ec3a44d80ae2b3105484e95b3b5d4ab4a34e6be13fc5fc5e00ee68
MD5 69c6e9b7ee544a771e494713135587f6
BLAKE2b-256 0e9699c6847d99e7657991903e661b9b3e41865f6e1e396030130c10ba97ab53

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d4116db7ae872fc226025a359a231bc586a0a649c98ba358265d08bd7b218805
MD5 f42a7d9773bb288ef655025cc17ecf65
BLAKE2b-256 0f71573eb6b8bb40f25884ea4b0bc3322c07e5b16b9be431c8d7ac709dd3eb3a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9a7836a71a35b15597ddc8bff15524993f256d003d6d1c27254a98cbc1c42736
MD5 167a83b22aac820a42182c8820ecfc6b
BLAKE2b-256 210b18198b91431c21868e5727cccb3d02347ae67da261030e1e424756a1423b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b35bc8655689ce93ed26e216befb14f4dac06ad93c7f65cd121ba000832fe2a9
MD5 99a9e3a5db30f3596c01a23f2882c861
BLAKE2b-256 beb828a467418eb66f039519db88902740c36da3ab0d2ce2f5196b387d9ae619

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e32c2c9136b28d58d0fe45b0db7d705843140c9339879eb83d431487125f4462
MD5 fd34f1da12845876723a96b51a7b5b5b
BLAKE2b-256 ff85913373c3a8e3e4f5e5efc1f7948a272cfe3628ef2a0ed0da70f6dec6ef34

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 5a0dadcd400cc46dc91ebc542d57dd16716a6e7a31c9fbec44e2ab3bf416262d
MD5 37814450d266fd53d9c70ee0d0a7f4cc
BLAKE2b-256 40a65c912ad2822df68289d96dfc5bcb64d5696ce18348c0a6676a935e45d5d8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f195af8c053e2902d399256bdf3f2d2b3ae16a7a4215193c9a4c2c7ef8fd448f
MD5 3d0ccd2bef39a0ec83e0741d47cfbb99
BLAKE2b-256 c5504de9e9479f45ef28a6047e0e4e1134a24993d0af78184531b5374c8a5a58

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5b6cca950b45062c30d710f39dfae813bcc46b61ff8a785c603eb0049622e1e6
MD5 f1ecc7b7a90e9f5253bc8b3016064ee5
BLAKE2b-256 86f2e4272f46e6e49974901ed0cc8e88661ddf9e398c0409bd1bd982a60feba3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2cdc3202fd9e27e78295083b25117d1f7bb0dd17ff56872a0d725a6daf9149c4
MD5 ac7585045ca3c828b3745740bad31a85
BLAKE2b-256 6a79d255f91bf7d1dc28b81af3188809dc4d58387e1af152c19a8e84b3bf4ebe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f7baf5a00a18c2d6205eff0cf0902c5b437c11e35952e2c70226396a768937b3
MD5 2d9526d66471ee98aba53d58044b2333
BLAKE2b-256 c239d8493c78ab2f49539d22aa7a278965e95cf10cd94b4a6932e68242046b4e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 b2b176a510d87e085b557d45abcbf81e9df72b5e78636b033d97f3ab9016b86f
MD5 e746b841d20ff629a3fa8c48f3e7fa38
BLAKE2b-256 38d6a08ffc7ca4a9b44a8277a6ef03559350b31e7144a2645697ec47973a9a45

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8ccfca96626846429613b947e87344e9b324b98ac2d5b6bfa0b8ac1a3407c5ef
MD5 63a9dea270ac0e3e1402f6f9d1ec63f9
BLAKE2b-256 be62c4a0e32107adfa47bc50bec21f9464b7574afef5ff74eb863794090e7f93

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4ef5555df2c9fb77f46986b3e017e8649c20f281432ad9d707d92f2b24a98f39
MD5 dd01154343120bb47deeab655aa6ef96
BLAKE2b-256 be74b4f15566adda82aad162efeae8f1006ec90c8c348df2e34cdc21395da487

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for private_attribute_cpp-2.0.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b2aab31825f277ebfcee8709cf7ec058e178c232fb1c8b2cfd80c5ff2019917a
MD5 65ee78d5756bc6afc924d4ee8b2383f8
BLAKE2b-256 9a54afcf45e3b560b1bc12562619380eb5bec76c7e778ce5b773b611dff86e03

See more details on using hashes here.

Release history Release notifications | RSS feed

2.1.12

36 files

2.1.11

36 files

2.1.10

36 files

2.1.9

36 files

2.1.8

36 files

2.1.7

36 files

2.1.6

36 files

2.1.5

36 files

2.1.4

36 files

2.1.3

36 files

2.1.2

36 files

2.1.1

36 files

2.1.0

36 files

2.0.6

36 files

2.0.5

36 files

2.0.4

36 files

This release

2.0.3 This release

36 files

2.0.2

36 files

2.0.1

36 files

2.0.0

36 files

1.4.11

36 files

1.4.10

36 files

1.4.9

36 files

1.4.8

36 files

1.4.7

36 files

1.4.6

36 files

1.4.5

36 files

1.4.4

36 files

1.4.3

36 files

1.4.2

36 files

1.4.1

36 files

1.4.0

36 files

1.3.10

36 files

1.3.9

36 files

1.3.8

36 files

1.3.7

36 files

1.3.6

36 files

1.3.5

36 files

1.3.4

36 files

1.3.3

36 files

1.3.2

36 files

1.3.1

36 files

1.3.0

36 files

1.2.10

36 files

1.2.9

36 files

1.2.8

36 files

1.2.7

36 files

1.2.6

36 files

1.2.5

36 files

1.2.4

36 files

1.2.3

36 files

1.2.2

36 files

1.2.1

36 files

1.2.0

36 files

1.1.0

36 files

1.0.12

36 files

1.0.11.1

36 files

1.0.11

36 files

1.0.10

36 files

1.0.9

36 files

1.0.8

36 files

1.0.7.1

36 files

1.0.7

36 files

1.0.6

36 files

1.0.5

36 files

1.0.4

36 files

1.0.3

36 files

1.0.2

36 files

1.0.1

26 files

1.0.0

26 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page