ディレクトリ
二つの方法で親クラスのメソッドを再利用します。
- 直接メソッド指定されたクラスを呼び出す名前を命名使用
- superキーワード
直接呼び出しメソッド指定されたクラス
- 名前、および継承とは何の関係も命名使用してください。しかし、それは完了する必要があります
class Person:
school = 'xxx'
def __init__(self,name,age):
self.name=name
self.age=age
def study(self):
print('study....')
class Student(Person):
school = 'yyyy'
def __init__(self,name,age,course):
# 直接调用Person类的__init__方法
Person.__init__(self,name,age)
self.course=course
def study(self):
Person.study(self)
print("%s学生在学习"%self.name)
stu1=Student('wed',19,"Python")
# stu1.school='xxx'
print(stu1.school)
stu1.study()
YYYYの
研究....
学習における水・学生
第二に、スーパーから()キーワード
まず、スーパー()メソッドを呼び出すために使用される親クラス(スーパークラス)
その呼び出しシーケンスは応じている呼び出し元のオブジェクトのMRO呼び出しシーケンス()メソッドに。
2.1使用
スーパー()メソッドを使用している、とpython2ののpython3には同じではありません。
執筆の新しいクラス:
super().__init__(参数1,参数2) # 新式类,调用父类的init方法并传参
クラシック言葉遣い:
super(当前类名,self).__init__(参数1,参数2) # 经典类,调用父类的init方法并传参
2.2親クラスのメソッドを呼び出すために、スーパー使用
class Person(object):
school = 'xxx'
def __init__(self,name,age):
self.name=name
self.age=age
def study(self):
print('study....')
class Student(Person):
school = 'yyyy'
def __init__(self,name,age,course):
#super() 会按照mro列表拿到父类对象
#对象来调用绑定方法,不需要传递第一个参数(self)
super().__init__(name,age)
#经典类和新式类
#经典类中必须这么写(py3中没有经典类),都用上面那种方式写
# super(Student,self).__init__(name,age)
self.course=course
def study(self):
# Person.study(self)
super().study()
# print("%s学生在学习"%self.name)
stu1=Student('wed',19,"Python")
# stu1.school='xxx'
# print(stu1.school)
stu1.study()
2.3スーパー()注文するために呼び出します
覚えておいてください:呼び出しのシーケンスであるオブジェクトのMRO()メソッドの呼び出しシーケンスを呼び出します。
# super是按照mro列表找
class A:
def f1(self):
print('A.f1')
class B:
def f1(self):
print('B.f1')
def f2(self):
print('B.f2')
# 重点
super().f1()
class C(B,A):
#注意这个顺序,这个顺序报错
# class C(A,B):
def f1(self):
print('C.f1')
#C实例化产生一个对象
c=C()
# print(c.f2())
print(C.mro())
c.f2()
[<クラスのメイン .C '>、<クラスの主 .B'>、<クラスの主 .A '>、<クラスのオブジェクト'>]
B.f2
A.f1