从 non-parent mixin class 获取属性

Obtain attributes from a non-parent mixin class

我有一个 class“TrackPage”,它是一个网页 class,其中包含从该页面获取的信息,例如曲目标题 URL 和文件 - 从页面下载的文件。

track 属性本身是一个 class“Track”,它应该从调用它的 TrackPage(如标题,但不是 URL)中获取一些属性值,但也有它的自己的属性,如长度、尺寸等:

class TrackPage(BasePage):
    def __init__(self):
        self.track_title = 'foo'
        self.url = 'www.bar.com'
        self.file = 'baz.mp3'
        self.track = Track() 


class Track:
    def __init__(self):
        self.track_title =    # Take TrackPage attribute
        self.file =           # Take TrackPage attribute
        self.length =         # Obtained through processing TrackPage attribute file
        self.size =           # Obtained through processing TrackPage attribute file

 

根据我的阅读,似乎使用包含我想要的 TrackPage 属性的 mixin class 是可行的方法,但我找不到与我正在尝试的类似的示例做。

对于这样的场景,构建我的 classes 的最佳方式是什么?

您至少有两个选择。

首先是将TrackPage实例传入,收集你想要的属性:

class TrackPage(BasePage):
    def __init__(self):
        self.track_title = 'foo'
        self.url = 'www.bar.com'
        self.file = 'baz.mp3'
        self.track = Track(self) 

class Track:
    def __init__(self, tp):
        self.track_title = tp.track_title 
        self.file = tp.file
        self.length = tp.file.length # or however
        self.size = tp.file.size # or however

第二种是仅保留 TrackPage 实例并在需要时引用属性:

class TrackPage(BasePage):
    def __init__(self):
        self.track_title = 'foo'
        self.url = 'www.bar.com'
        self.file = 'baz.mp3'
        self.track = Track(self) 

class Track:
    def __init__(self, tp):
        self.track_page = tp

    def get_file(self):
        return self.track_page.file