python父类调用子类
A. python子类继承父类,使用self报错,求大神指点
我的是python3;
这里有两个问题:
1、你继承的时候,为何跟父类的函数名都是“method”,除非的你想改写父类的这个函数“method”,若不是,就不要用同样的函数名;我这里把函数名改成了“method2”;
2、调用父类的方法时,不要这样“father.method(self)”,而应该是这样“self.method()”;
In[77]: class son(father):
def method2(self):
print ('starting son.method')
self.method()
print('ending son.method')
In[78]: s_ = son() # 实例化类'son'
In[79]: s_.method2() # 调用子类的方法“method2”
starting son.method
in father.method
ending son.method
In[80]: s_.method() # 调用父类的方法“method”
in father.method
B. python子类如何才能调用父类的方法
.直接写类名调用
2.用 super(type, obj).method(arg)方法调用。
3.在类定义中调用本类的父类方法,可以直接 super().method(arg).
在代码中调用对象的父类的方法的示例:
ob = B()super(B,ob).method(arg) #调用class B的父类class A的method。
初始化中调用父类初始化方法示例:class B(A):def __init__(self):super().__init__()
C. Python父类怎样可以使用子类的属性和方法吗
父类不可以使用子类的属性和方法
D. Python 子类继承父类的问题
如果我没有理解错你的问题的话,答案是不会的.子类一样可以写自己的__init__函数.请看:
'''
1.继承有什么好处?最大的好处是子类获得了父类的全部功能。
2.当然,也可以对子类增加一些方法.
3.当子类和父类都存在相同的run()方法时,我们说,子类的run()覆盖了父类的run(),在代码运行的时候,总是会调用子类的run()。这样,我们就获得了继承的另一个好处:多态。
'''
classAnimal(object):#父类
def__init__(self,name):
self.name=name
defrun(self):
print('Animalisrunning...')
defsleep(self):
print('Animalissleeping...')
classDog(Animal):#子类
#初始化父类有两种方式:
#父类.__init__(self,父类参数)=>Animal.__init__(self,name)
#super(子类,self).__init__(父类参数)=>super(Dog,self).__init__(name)
def__init__(self,name,color):
#Animal.__init__(self,name)
super(Dog,self).__init__(name)
self.color=color
defrun(self):#多态
print('Dogisrunning...')
defshow_info(self):
print('name=',self.name)#继承了父类的属性
print('color=',self.color)
self.run()#调用自己的方法
ab=Dog('Lorry','Red')
ab.show_info()
E. Python继承父类parent的正确格式为
格式:
class 子类名(父类1,父类2)
类的继承就是让子类拥有父类的属性和方法。
几个注意:py支持多继承
子类继承的父类只能初始化一次,如果父类1和父类2有共同的父类或者祖先类,则类初始化的时候会失败。
当父类具有相同方法时,会调用最先继承的父类中的方法,如果要指定父类,则需要重写此方法,并通过父类名.方法名来调用指定父类方法。
F. python中子类调用父类的初始化函数初始化自身有些不太懂的地方!代码如下
python2里面需要这样写,python3里面不需要写参数,直接super().__init__()就可以了。
G. Python子类调用父类方法或子类定义的方法输出会多出个'None'
我觉得最佳的回答的是不对的, 在python中若是函数没有定义return的结果,则会默认返回一个none
deffunc():
a=1
b=2
a=func()
print(a)
>>>None
在官方文档中也有说明的,而你打印出none的原因就是因为你在类的方法
中直接打印了字符串没有返回值,将方法中的pring改成return即可
H. Python中如何使具有相同父类中的两个子类之间进行方法调用
子类调用父类函数有以下方法:
直接写类名调用
用 super(type, obj).method(arg)方法调用。
在类定义中调用本类的父类方法,可以直接用super().method(arg)
class A:
def method(self, arg):
pass
class B(A):
def method(self, arg):
# A.method(self,arg) # 1
# super(B, self).method(arg) # 2
super().method(arg) # 3
I. python 子类怎么调用父类方法
两种方法解决:
- 第一种
class A:
def __init__(self):
self.namea="aaa"
def funca(self):
print "function a : %s"%self.namea
class B(A):
def __init__(self):
#这一行解决了问题
A.__init__(self)
self.nameb="bbb"
def funcb(self):
print "function b : %s"%self.nameb
b=B()
print b.nameb
b.funcb()
b.funca()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
第二种:
#父类需要继承object对象
class A(object):
def __init__(self):
self.namea="aaa"
def funca(self):
print "function a : %s"%self.namea
class B(A):
def __init__(self):
#这一行解决问题
super(B,self).__init__()
self.nameb="bbb"
def funcb(self):
print "function b : %s"%self.nameb
b=B()
print b.nameb
b.funcb()
b.funca()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PS:让类A继承自object类,这样才能使用super函数,因为这是python的“新式类”支持的特性。当前的class和对象可以作为super函数的参数使用,调用函数返回的对象的任何方法都是调用超类的方法,而不是当前类的方法。
优劣:
- 方法一更直观,方法二可以一次初始化所有超类
- super函数比在超类中直接调用未绑定方法更直观,但是其最大的优点是如果子类继承了多个父类,它只需要使用一次super函数就可以。然而如果没有这个需求,直接使用A.init(self)更直观一些。
J. python 如何调用子类中的方法呢
别人的是多态,也就是大家都从一个接口继承,然后子类对象可以当父类用,你这个父类都不知道谁继承了它,怎么调用子类方法?你这个思路不太对劲的。