🔒 py-readonlyx – Python için Read-Only Property Decorator

:locked: py-readonlyx – Python için Read-Only Property Decorator

Merhaba arkadaşlar,
Python’da sınıflar içinde sadece belli property’leri salt okunur (read-only) yapmak için ufak ve sade bir kütüphane geliştirdim: py-readonlyx

:light_bulb: Nedir?

py-readonlyx, sadece @readonly decorator’ı ile property’lerinizi dışarıdan değiştirilmez veya silinemez hale getirmenizi sağlar.
Yani klasik @property + @setter karmaşasına gerek kalmadan doğrudan sadece okunabilir alanlar oluşturabilirsiniz.

:wrench: Özellikler

  • @readonly ile kolay kullanım
  • ReadOnlyError adında özelleştirilmiş hata sınıfı
  • Sadece istediğiniz property’leri kilitleyebilirsiniz (sınıfın tamamı değil)
  • Sıfır bağımlılık, sadece standart Python
  • Thread-safe
  • Ortalama ~50 satır – oldukça minimal
  • Python 3.12+ ile test edilmiştir

:rocket: Kurulum

pip install py-readonlyx

:test_tube: Kullanım Örneği

from py_readonlyx import readonly, ReadOnlyError

class User:
    def __init__(self, name="Fırat", age=25):
        self._name = name
        self._age = age
        self._status = "active"

    @readonly
    def name(self):
        return self._name

    @readonly
    def age(self):
        return self._age

    @property
    def status(self):
        return self._status

    @status.setter
    def status(self, value):
        self._status = value

user = User("Ahmet", 30)

print(user.name)  # "Ahmet"
user.status = "inactive"  # ✅ Çalışır
user.name = "Mehmet"      # ❌ ReadOnlyError

:package: Bağlantılar

:pushpin: Nerede İşinize Yarar?

  • Immutable model sınıfları
  • Konfigürasyon sınıfları
  • Hesaplanan ama değiştirilememesi gereken değerler (örn. area, version, created_at vs.)
  • Dışarıdan override edilmesini istemediğiniz alanlar

Proje tamamen açık kaynak, katkı yapmak isteyen herkese kapım açık. Görüşlerinizi, eleştirilerinizi ve PR’larınızı beklerim. :victory_hand:

2 Beğeni

Ellerinize sağlık. @property ile de readonly olmuyor muydu, yanlış mı biliyorum? :thinking:

Elinize sağlık. Sonuçta emek verilmiş. Bir ihtiyaç oluşmasa bir çözüm de oluşmaz değil mi?

Bu konuda sizinle doğrudan alakası olmasa da genel bir fikrimi belirteyim.

Bu sınıflar konusunun abartıldığını düşünüyorum. Bu kadar çok nyp odaklanmak doğru mu emin değilim.

Yani düşünüyorum belki ben rastlaşmadım ama yazdığım kodlarda kaç kez debug aşamasında erişilmemesi gereken bir property ye bir erişim nedeniyle kodumda hatalar oldu. Hatırlayamıyorum.

Yani çok büyük bir ekipte aynı property yi tanımlayıp farkında olmayıp modülleri bir araya geldiğinde belki bir çakışma olabilir ama onda da zaten farklı bir hata alınabilir.

Yazılımlardaki çok istisna durumları yönetmek için bu kadar emek harcamak bana biraz lüks geliyor.

Tersten sorayım. Dışardan override etmeyeceksem, kalıtım, kapsülasyon vs kullamış olmak için sınıf içinde tutmak ve nesne yaklaşımı kullanmanın ne anlamı var?

Tabi ki bazı anlamlı ihtiyaçlar da olabilir ama bu aşamada bana bunlar istisna geliyor. Esnekliği artırmakla güvenliği artırmak arasında denge kurmak gerekir.

Özetle aşırı özel bir ihtiyaç metodolojisi gibi geld.

1 Beğeni