显然,我有3个不同的班级:a、b和c
a类:包含自我王从类b继承的(由用户输入)
b类:提示用户输入king值,这将传递给a级
类c:从类a继承,该类具有从类b输入的king值,然后传递给类a
代码示例:
class a(object):
def __init__(self, king):
self.king = king
class b(a):
def __init__(self, king):
super(b,self).__init__(king=king)
class c(a):
def __init__(self):
super(c,self).__init__()
print(self.king)
if __name__ == "__main__":
bb = b(king="madsfjsfdsdfn")
cc = c()
cc
我做错什么了吗?我得到一个错误,例如:
TypeError: __init__() missing 1 required positional argument: 'king'
我以为在类b中输入的值已经传递给了类a。既然它已经传递给了类a,那么类c使用super。init()将继承它的值并相应地打印它。我是不是做错了,对super()函数理解错了?你知道吗
当用户传递值和只有2个类存在时:
class a(object):
def __init__(self, king):
self.king = king
class b(a):
def __init__(self, king):
super(b,self).__init__(king=king)
print(self.king)
if __name__ == "__main__":
bb = b(king="madsfjsfdsdfn")
bb
那么我的输出是正确的:
madsfjsfdsdfn
你在向后看。定义
class b(a):
意味着b
从a
继承,而不是相反,所以当调用c
的__init__
上的super
时,您调用的是a
。你知道吗基本上,当您执行
c()
(与c.__init__()
相同)时,c
的__init__
函数的第一行变为a.__init__()
(与a()
相同),并且正如错误所说的a
的__init__
函数使用king
参数,如果没有这样的参数就不能调用。你知道吗此外,类和对象之间存在概念上的误解,例如在代码中,
a
,b
和c
是类(更不用说类应该总是以大写字母开头),而bb
和cc
是对象。一旦定义了类,就不能继承在类定义之外修改的属性。你知道吗编辑:
在阅读了几篇评论之后,我认为您想要的是一个静态属性king,重要的是要知道
self
关键字只存在于对象中,因此通过执行self.king = king
,您的意思是只有a
的对象将具有king
属性,而不是a
类本身。你知道吗假设我们有一个类
A
:我可以访问
A.p1
或A().p1
并获取'static'
,A().p2
将给我'object'
,A.p2
将给我一个错误,因为A
它不是对象。如果类从A
继承,它将只继承p1
,因为p2
不是静态的。你知道吗我知道您要做的是将这个
p1
从实例化继承自A
的类更改为B
:问题是
super
实际上不是父类,而是一个返回对象的内置函数,因此这样做会产生:你必须这么做
显式修改
A
类,以便从该类继承A
的对象具有新参数,例如:你可以做:
即使第一行打印
'static'
,最后一行也会打印'modified'
。你知道吗这将是最类似于我目前解决的问题,我想得到什么。 我的目标实际上是找到一种方法来传递这个存储值,它在类b中被调用(从我的示例中),并作为类a的实例传递,然后将它继承到类c 代码:
我认为这个例子符合你的要求。唯一需要构造函数(init)的类是在类的实例中存储值的类(创建对象来存储值)。你知道吗
相关问题 更多 >
编程相关推荐