Open malmaud opened 10 years ago
What would the benefit be?
If you are going to have a python class wrapped in a julia type, I can not see how you would avoid having to call a py_update(obj::py_wrapped_type)
function on the type before accessing any of the fields. Without that there is no hook in julia to intercept the access and ask python what the value is now.
The point is wrapping the return value of some Python function calls as a Julia native composite type, just like PyPlot wraps matplotlib's Figure class.
I definitely wasn't thinking that there would be synchronization between the wrapped Julia representation of a Python object and the object's attributes in the Python runtime.
I was thinking maybe in a julian
keyword for @pyimport
, or something similar, which create a Julia type for Python class and methods applied to this class in a Julian way.
Now:
@pyimport Bio.Seq as s
@pyimport Bio.Alphabet as a
my_dna = s.Seq("AGTACACTGGT", a.generic_dna)
my_dna[:find]("ACT")
This idea:
@pyimport julian from Bio.Seq import Seq
@pyimport Bio.Alphabet as a
my_dna = Seq("AGTACACTGGT", a.generic_dna)
find(my_dna,"ACT")
I don't have any idea about how implement it, but maybe we can use something like this (?):
>>> [method for method in dir(Seq) if callable(getattr(Seq, method))]
['__add__', '__class__', '__cmp__', '__contains__', '__delattr__', '__format__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__len__', '__new__', '__radd__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_get_seq_str_and_check_alphabet', 'back_transcribe', 'complement', 'count', 'endswith', 'find', 'lower', 'lstrip', 'reverse_complement', 'rfind', 'rsplit', 'rstrip', 'split', 'startswith', 'strip', 'tomutable', 'tostring', 'transcribe', 'translate', 'ungap', 'upper']
Is there any interest in expanding the scope of this package to include more tools for conveniently wrapping Python libraries? I'm thinking of functionality like
__dict__
and slots attributes, and heuristically create a Julia type with corresponding fields.I realize that these things can't be done in full generality since fields and methods can be dynamically created in Python at any time and the types of an instance's attributes might change at any time, but many Python packages don't really rely on that functionality.