Всем привет,
Я программирую на Python уже довольно давно, и хотя Python делает разработку проще и быстрее во многих отношениях, есть область, которая всегда казалась незамеченной, хотя она широко использовалась сообществом Python, и это то, что я Я говорю о родной объектно-ориентированной системе Python.
В то время как Java, C# или даже C++ имеют объектно-ориентированную систему, которая поддерживает принудительное применение типов атрибутов, интерфейсы и абстрактные классы, Python может в какой-то степени предоставить эти вещи, но без какого-либо принудительного применения.
Это всегда казалось мне постыдным, потому что Python во многих отношениях очень мощный язык, но это также делает его подверженным ошибкам. Например, у меня было много ошибок в Python, когда я пытался присвоить значение неправильному атрибуту, потому что я просто неправильно написал его имя на один символ (например, namee вместо name).
Еще одна проблема, которая показалась мне проблематичной, заключается в том, что существует множество повторяющихся задач, которые мы выполняем при создании классов, которые также можно автоматизировать, от конструкторов, применения типов, ленивых атрибутов до создания геттеров/сеттеров (хотя я знаю о  декоратор @property, я всегда предпочитал методы get/set).  Конечно, Python 3.7 представил классы @dataclass, они очень упрощены — нет принудительного применения типов, назначение значений по умолчанию в лучшем случае является базовым (вы не можете вызвать метод для присвоения их значений по умолчанию), не говоря уже о ленивых атрибутах или окончательных атрибутах.
По этой причине я решил создать новую объектно-ориентированную систему для Python — Kisa. Предполагается, что Kisa привнесет множество улучшений по сравнению с собственной объектно-ориентированной системой Python, в том числе:
- Автоматически сгенерированные геттеры/сеттеры
- Автоматически сгенерированные конструкторы
- Атрибуты по умолчанию — могут быть инициализированы методом экземпляра.
- Ленивые атрибуты
- Поддержка типов атрибутов
- Абстрактные классы
- Интерфейсы
- Оформление наследства
- Статические атрибуты
- Статические методы
- Модификаторы атрибутов — добавьте хуки к вызову атрибута/метода перед вызовом, во время вызова или после его вызова.
- Разрешить атрибутам быть Noneили нет
- Сделать атрибуты окончательными
- Решите, требуются ли атрибуты конструктору или нет
- Многое другое
Я верю, что Kisa может и сделает разработку на Python более быстрой для написания, поддержки, более организованной и безопасной.
Очень простой пример класса Kisa:
import kisa
class Person(metaclass=kisa.Class):
    firstname = kisa.Info(type=str,  required=True, final=True)
    lastname = kisa.Info(type="str", required=True, final=True)
    age = kisa.Info(type=int, required=True)
    friends = kisa.Info(type=list, default=lambda: [])
    def fullname(self):
        return f"{self.firstname()} {self.lastname()}"
    def birthday(self):
        # Getter
        new_age = self.age() + 1
        # Setter
        self.age(new_age)
# # raises Exception: "firstname" is Missing in instance creation for class Person
# noam = Person()
noam = Person(firstname="Noam", lastname="Nisanov", age=22)
# raises Exception: Tried to modify a final attribute "firstname"
# noam.firstname("Generic")
# raises Exception: "age" must be of type: <class 'int'>
# noam.age("bla bla")
print(f"First name: {noam.firstname()}") # prints "First name: Noam"
print(f"Last name: {noam.lastname()}") # prints "Last name: Nisanov"
print(f"Full name: {noam.fullname()}") # prints "Full name: Noam Nisanov"
print(f"Current age: {noam.age()}") # prints "Current age: 22"
print(f"Birthday!") # prints "Birthday!"
noam.birthday()
print(f"New age: {noam.age()}") # prints "New age: 23"
Для получения дополнительной информации, пожалуйста, взгляните на проект GitHub

Спасибо
Ноам Нисанов ([email protected])
 
                                                                     
                                                                     
                                                                    