Skip to content

Default implementation for Interface property setters #49

Open
@Diogo-Rossi

Description

@Diogo-Rossi

Hi @ssanderson, congratulations for this package! (btw, it should be included in python's stdlib)

I'd like to tell there may be an issue when there is a default property setter.

from interface import Interface, implements, default

class Person(Interface):
    
    def set_name(self, value):
        pass
    
    def get_name(self):
        pass
    
    @default
    @property
    def name(self):
        return self.get_name()
    
    @default
    @name.setter
    def name(self,value):
        self.set_name(value)

class MyPerson(implements(Person)):
    
    def set_name(self, value):
        self._name = value
    
    def get_name(self):
        return self._name

The above code leads to the following

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
File [...]:9, in <module>
      6 from __future__ import annotations
      7 from interface import Interface, default, implements
----> 9 class MultiInputDialogInterface(Interface):
     11     @default
     12     @property
     13     def windowtitle(self) -> str:
     14         return "Multiple Input Dialog"

File [...]:17, in MultiInputDialogInterface()
     11 @default
     12 @property
     13 def windowtitle(self) -> str:
     14     return "Multiple Input Dialog"
     16 @default
---> 17 @windowtitle.setter
     18 def windowtitle(self, title: str) -> None:
     19     raise NotImplementedError
     21 @default
     22 def set_windowtitle(self, value:str) -> MultiInputDialogInterface:

AttributeError: 'default' object has no attribute 'setter'

Is that ok or did I miss something?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions