I'v read how to overload... and multiple constructors in python and a few more on this topic, however I'm looking for something more specific.
I'm given a list of Content objects and a list of Data objects:
class Content:
    def __init__(self):
        self._title = 'movie title'
        self._url = 'http://movie-url'
    @property
    def title(self):
        return self._title
    @property
    def url(self):
        return self._url
class Data:
    def __init__(self):
        self._title = 'movie title'
        self._year = 2021
        self._rating = 7.6
    @property
    def title(self):
        return self._title
    @property
    def year(self):
        return self._year
    @property
    def rating(self):
        return self._rating
I want to match each Content with it's corresponding Data by the title property and combine everything under one class Movie, by passing one of the other objects to Movie's init argument:
movie_content = Movie(Content())
movie_data = Movie(Data())
From what I'v read so far my options are:
- Default arguments: Doesn't seem to fit here (correct me if I'm wrong) since I want to pass only one argument anyway.
- *args: I prefer to avoid passing a long line of arguments (there will be at least 12).
- @classmethod: This approach is the most appealing to me, but I'm struggling with the implementation:
class Movie:
    def __init__(self, object):
        self.object = object
    @classmethod
    def by_content(cls, content):
        _title = content.title
        _url = content.url
        return cls( # what goes here?)
    @classmethod
    def by_data(cls, data):
        _title = data.title
        _year = data.year
        _rating = data.rating
        return cls( # what goes here?)
- Using methods as multi-setters, which I'm currently using (not the most pythonic from my understanding):
class Movie:
    def __init__(self):
        self._title = ''
        self._url = ''
        self._year = 0
        self._rating = 0.0
    def by_content(self, content):
        self._title = content.title
        self._url = content.url
    def by_data(self, data):
        self._title = data.title
        self._year = data.year
        self._rating = data.rating
Any thoughts or suggestions would be greatly appreciated.
 
    