Skip to content

Default implementation for Interface property setters #49

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?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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