Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用相同的变量在类继承中正确重载变量_Python_Python 3.x_Inheritance - Fatal编程技术网

Python 如何使用相同的变量在类继承中正确重载变量

Python 如何使用相同的变量在类继承中正确重载变量,python,python-3.x,inheritance,Python,Python 3.x,Inheritance,我需要重写或重载类继承中的变量。以下是我努力实现的目标: class MainClass: def __init__(self, a, b, c, d): type(a) = str class MyClass(MainClass): def __init__(self, a, b, c, d): type(a) = object of one of my classes. 如何在Python 3中实现这一点?我已经研究过继承,但这种情况要么没有讨

我需要重写或重载类继承中的变量。以下是我努力实现的目标:

class MainClass:
    def __init__(self, a, b, c, d):
        type(a) = str

class MyClass(MainClass):
   def __init__(self, a, b, c, d):
       type(a) = object of one of my classes.

如何在Python 3中实现这一点?我已经研究过继承,但这种情况要么没有讨论,要么我不明白。您似乎想做的是让每个类都能够访问另一个类。然而,这不是类继承的工作方式。尝试使用此选项使类可以相互访问

class MainClass:
    def __init__(self, a, b, c): # main class with variables, a, b and c.
        self.a = a
        self.b = b
        self.c = c

    def printall(self): # this will be so we can see what happens
        print(self.a)
        print(self.b)
        print(self.c)

class MyClass:
    def __init__(self, class_inst, a): # another class of a class and a variable
        self.a = a
        self.class_inst = class_inst

    def override(self): # this will override(or overload) the other class variable.
        self.class_inst.a = self.a
像这样为它编写一些测试代码

class_inst_one = MainClass("Hello","World","!")
class_inst_two = MyClass(class_inst_one, "Replacement")
class_inst_one.printall()
class_inst_two.override()
class_inst_one.printall()
现在应该得到这样的输出

Hello
World
!
Replacement
World
!
因此,您正在尝试重置变量。
实际上,这与第一次创建变量是一样的

类库:
var=12
类别Cls(基本):
var='abc'
创建新类时会复制该类的变量,因此这些变量属于基础,但从新类中获取。如果这个变量不是他的,新类将重定向到它的基

因此,编辑类(见下文)会使函数引用它的类,该类引用它的基

类(基):
def getVar(self):
返回self.var
通过编辑和删除,它将作用于类。删除将删除对基的引用,编辑将删除旧引用并创建其自身的值。
请注意,编辑基变量会使类变量更改为基变量,但编辑类不会编辑基。
例如:

类库:
a=10
类别Cls(基本):及格
基数a=12
#现在Base.a等于Cls.a
Cls.a=8
#基数a仍然是12,但Cls.a是8
del Cls.a
#Base.a仍然是12,但不再有Cls.a
要使变量深入复制到类中(因此对基的编辑不会影响类),只有一种解决方案:

类库:
var=12
类别(基本):
通过
Class.var=Base.var#添加任何要复制的方法,如list.copy()
它之所以有效,是因为来自基的值是通过外部复制的,有效地将其与基分离,然后将值附加到类

请注意,一个非常有用的原则是,带有2个或更多下划线(uu)且与u{name}形式不匹配的名称将重命名为{classname}{variable name}。您可以使用它按类分隔具有相同名称的变量


通过在我为您标记的位置应用函数,您可以将对象的值更改为您想要更改的任何值。

什么?这甚至不是有效的语法!你能举一个不那么抽象的例子吗?正如书中所写的,根本不清楚你想要实现什么,你尝试了什么,以及它是如何失败的。Python是动态类型化的,所以如果您的意思是这样的话,您不一定需要引入子类来传递另一种类型的东西,如
a
。@jornsharpe在第一个示例中,他将一个变量转换为string。在第二段中,他将其改写为其他内容。我想这很清楚。@Bharel对我来说不是。他们是想说第一种情况下,
a
应该是字符串,第二种情况下应该是其他东西吗?如果是这样的话,我并不认为这是一种特别清晰的表达方式(尤其是因为
不能分配给函数调用
)。为什么他们认为Python关心这两种情况?@Bharel,这样你就可以回答这个问题了?或者改写问题,用自己的话/例子来澄清实际被问到的问题?因为我两者都做不到;这个问题一点也不清楚,我不知道OP想做什么,这个至少有8个错误的例子也没有帮助…@Godfrey“设置”了什么?同样,Python是动态类型的,
a
不必是特定的类型。给出一个,一些实际的代码,或者至少是一个你想如何与之交互的有效演示。删除括号也没什么区别,而且你没有添加足够的冒号。并不是说即使在那之后它在语法上仍然有效。我不认为这是我想做的,但我会测试它。我想从主类继承'b','c','d',但我想在一个新类中定义我自己的'a'。这令人困惑。不,我不是python新手。那么你需要弄清楚你想要实现什么。我所能确定的是,您希望在一个变量中存储两种不同的类型,这取决于您是创建基类还是派生类。请记住,Python是一种动态语言,因此这是完全合法的。只有当你开始对代码中的变量做出假设,并尝试调用函数等来处理一种类型的变量时,你才会犯错误,而事实上它是另一种类型。此外,如果您发现自己在动态代码中进行了类型检查,这就是代码的味道。在示例中添加更多的代码-在类和调用代码中。角度不错。我也要试试这个。我知道这不是简单就是复杂。