python类的属性继承(获取实例化父类属性)

super() +父类中的方法,可直接子类调用运行父类的(方法)函数

      最近在编程中遇到某些数据需要通过类方法(或者说是函数)去读取,并且保存在类的属性当中(即实例化过程),以保证数据在整个类方法中共享。但由于该属性是根据类方法实例化获取的,导致在类方法之间的相互引用当中出现较大的困难,因为类方法实例过程中往往需要传入举例的实参。解决方案如下:(是在b站上看到的方法,偶然试一试)

下段代码为父类属性的获取方式:

temp_list=[[2, 1, 0, 3, 1, 6, 3, 7, 5, 3, 4, 6], [1, 8, 2, 5, 4, 10, 5, 10, 0, 10, 3, 4],[2, 5, 3, 4, 5, 8, 0, 9, 1, 1, 4, 7], [1, 5, 0, 5, 2, 5, 3, 3, 4, 8, 5, 9], [2, 9, 1, 3, 4, 5, 5, 4, 0, 3, 3, 1],[1, 3, 3, 3, 5, 9, 0, 10, 4, 4, 2, 1]]


class Data():
    """读取列表,获取机器工时工序等加工信息"""

    def __inint(self, temp_list='', process='', machine=6, job=6, time='',):
        self.temp_list = temp_list
        self.process = process
        self.machine = machine
        self.job = job
        self.time = time

    def time_listget(self):
        """获取各工序的加工时间,但其每次为随机取值,故参考意义不大"""
        self.temp_list = vt.getexcel('filename.xls')#实际的temp_listsh从别的代码文件引出,
        self.time = vt.valueto_interval(self.temp_list)

    def machine_job_num(self):
        """获取工件及机器的数量,"""
        self.job = len(self.temp_list)
        self.machine = int(len(self.temp_list[1]) / 2)

    def peocess_get(self):
        """获取工件的加工工艺顺序,即工序"""
        self.process = []
        for i in range(len(self.temp_list)):
            tem_process = []
            for j in range(0, len(self.temp_list[0]), 2):
                tem_process.append(self.temp_list[i][j])
            self.process.append(tem_process)
        return self.process


    def main(self): #该方法代码为自身调用类方法,改写类属性,同时也可利用在子类中调整父代属性
        self.time_listget()
        self.peocess_get()
        self.machine_job_num()

      上行代码中的main方法将能够轻松的改变子代无法继承父类属性的难题,但实际上只是继承其形参和方法。利用super方法调用父类中的方法,直接改变子类中的属性。

class IAto_Sto(Data):

    def __init__(self, temp_list='', process='', machine=6, job=6, time='',):
        """获取加工信息"""

        super().main()
        super().__init__()#本段继承方法完全没有必要,还有书上或者csdn上的各种调用方式,个人觉得无法解决类属性的动态性问题


#举例说明
a = IAto_Sto()
print(a.process)

#运行结果如下
[[2, 0, 1, 3, 5, 4], [1, 2, 4, 5, 0, 3], [2, 3, 5, 0, 1, 4], [1, 0, 2, 3, 4, 5], [2, 1, 4, 5, 0, 3], [1, 3, 5, 0, 4, 2]]

上述的代码倘若写成方式调用:super().__init__(temp_list='', process='', machine=6, job=6, time=''),则报错:TypeError: object.__init__() takes no arguments;

或者super().__init__(),则报错:AttributeError: 'IAto_Sto' object has no attribute 'process'

报错原因,怀疑因为没有给定具体实参。当通过super().main()函数调用后,参数变成了具体参数。在子类中就可以继承实例化属性了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值