如何在Python中使用master的子类和另一个类

2024-09-30 06:20:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经从一个库中对一个大型的主类进行了子类化。我的子类工作得很好,但我现在还想为主类使用的另一个类创建子类。但是,如果不编辑master类来使用我的新子类,我就看不出该怎么做。换句话说,我想表明master的子类中类“abc”的用法应该被“abc”的子类替换这里有一些伪代码来说明我想继承getenginestats但使用子类返回类型的问题。我知道我可以重写一个或两个方法,但是第二个类在整个主类中都使用,所以这不是一个实际的方法

class vehicle(object):
    horsepower = 0

    def getenginestats():
        # returns an enginestats object
        stats = EngineStats()
        stats.rpm = 1000
        return stats



class EngineStats(object):
    rpm = 0

class MyEngineStats(EngineStats):
    # add battery voltage to stats
    voltage = 0

class ElectricCar(vehicle)
    batterysize = 0



prius = ElectricCar()
# how do I get ElectricCar.getenginestats into a MyEngineStats object??
mystats = prius.getenginestats
myvoltage  = mystats.voltage

比尔


Tags: 方法masterobjectstats子类classrpmabc
2条回答

谢谢你的反馈。听起来不可能做到这种“嵌套子类化”? 我认为这对其他库也很有用,因为许多库都有用于结构和枚举的助手类。如果我可以将somebiglibrary子类化,为什么不允许我也将somebiglibrarystatus(enum)子类化到我的子类中呢

很容易工作,但会很好

谢谢

比尔

您需要调用函数getenginestats()并修复一些拼写错误:

class vehicle(object):
    horsepower = 0

    def getenginestats(self):
        # returns an enginestats object
        stats = MyEngineStats()
        stats.rpm = 1000
        return stats

class EngineStats(object):
    rpm = 0

class MyEngineStats(EngineStats):
    # add battery voltage to stats
    voltage = 1500

class ElectricCar(vehicle):
    batterysize = 0



prius = ElectricCar()
mystats = prius.getenginestats()
myvoltage  = mystats.voltage
print(myvoltage)

退货:

1500

您需要覆盖randint函数(例如):

import random

def _randint(a, b):
    return MyInt(random.original_randint(a, b))


class MyInt(int):
    def __new__(cls, *args, **kwargs):
        return super(MyInt, cls).__new__(cls, args[0])

    def isOdd(self):
        return 

_min = MyInt(0)
_max = MyInt(9)

random.original_randint = random.randint
random.randint = _randint

x = random.randint(_min, _max)
print(type(x), x)

退货:

(<class '__main__.MyInt'>, 3)

相关问题 更多 >

    热门问题