如何在Python类中向托管属性添加方法

gudnpqoy  于 2023-03-13  发布在  Python
关注(0)|答案(2)|浏览(84)

现在我有一个python类函数

class Data:
    
    def __init__(self, data=None, target=None):

        self._data = None
        self._target = None

        self.X = data
        self.y = target

    @property
    def X(self):
        return self._data
    
    @X.setter
    def X(self, data):
        self._data = data
    
    @property
    def y(self):
        return self._target
    
    @y.setter
    def y(self, target):
        self._target = target

    def view(self, method):

        print(pd.DataFrame(method))

我希望能够做的是将一个视图方法添加到现有的托管属性中,并且该视图方法将打印它所添加到的属性。

d = Data([1,2,3], [4, 5, 6])
d.X.view()
    0
0   1
1   2
2   3

d.y.view()
    0
0   4
1   5
2   6

有人能帮忙吗?

bnl4lu3b

bnl4lu3b1#

我不认为view()方法是必要的,因为Data.XData.y都已经是可打印属性了。
无论如何,如果你想让Xy拥有一个view()方法,我会给Data添加一个内部类_Coord(它继承自pd.Series并实现了这样的方法),然后创建_CoordXy示例:

import pandas as pd

class Data:
    
    def __init__(self, data=None, target=None):

        self._data = self._Coord(data, dtype="int")
        self._target = self._Coord(target, dtype="int")

    class _Coord(pd.Series):    
      
      def view(self):
        print(self.__repr__())

    # Your getters and setters ...
wgx48brx

wgx48brx2#

就我个人而言,我不会为getter和setter而烦恼,而是创建一个全新的类(如果需要,可以添加setter和getter,以防万一,如果不需要,可以删除它们):

class DataProp:
    def __init(self, data=None):
        self.data = data

    def set(data):
        self.data = data

    def get():
        return self.data

    def view():
        print(pd.DataFrame(self.data))

class Data:
    def __init__(self, data=None, target=None):
        self.X = DataProp(data)
        self.y = DataProp(target)

相关问题