Python3基础笔记---面向对象

只是对一些新的知识的记录

1、创建类

class ClassName:
    <statement-1>
    .
    .
    .
    <statement-N>

类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性。 __init__() 方法可以有参数

2、方法 (类中叫方法,单独写交函数)

定义一个名为 __init__() 的特殊方法(构造方法)

def __init__(self):
    self.data = []

类定义了 __init__() 方法的话,类的实例化操作会自动调用 __init__() 方法。

self代表类的实例,而非类。self 永远是执行该方法的调用者

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。

3、继承

class DerivedClassName(BaseClassName1):
    <statement-1>
    .
    .
    .
    <statement-N>

需要注意圆括号中基类的顺序若是基类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找基类中是否包含方法。

BaseClassName(示例中的基类名)必须与派生类定义在一个作用域内。除了类,还可以用表达式,基类定义在另一个模块中时这一点非常有用:

class DerivedClassName(modname.BaseClassName):

当子类对象调用方法时,若子类中有,直接调用,比如f2()会使用子类中重写的方法,但当子类中没有时,就会去父类中寻找。

class Base:
    def a(self):
        print('Base.a')

class F(Base):
    def a1(self):
        print('F.a')

class S(F):
    def b(self):
        print('S.b')

obj = S()
obj.b()
obj.a()

Python支持多继承

class DerivedClassName(Base1, Base2, Base3):
    <statement-1>
    .
    .
    .
    <statement-N>

需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。

 

需要注意如果他们有共同的基类,如果搜索到了L1中还没有这个方法,并不会去搜索Base,而是去搜索R1,R2,最后去搜索Base

4、方法重写

#!/usr/bin/python3
 
class Parent:        # 定义父类
   def myMethod(self):
      print ('调用父类方法')
 
class Child(Parent): # 定义子类
   def myMethod(self):
      print ('调用子类方法')
 
c = Child()          # 子类实例
c.myMethod()         # 子类调用重写方法
super(Child,c).myMethod() #用子类对象调用父类已被覆盖的方法

调用父类方法的两种方式:   super(类名 ,self).父类的方法(...)    or    父类名.父类中的方法(self, ...)         

原文地址:https://www.cnblogs.com/panlei3707/p/9014463.html