zoukankan      html  css  js  c++  java
  • Python学习笔记

    面向对象最重要的概念就是类(Class)和实例(Instance),比如球类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。在Python中,定义类是通过class关键字:

    class People(object):    # 自定义一个People类,括号内的object表示当前类继承object类
        '''this is my first object'''   # 类的注释
        
        name = 'daxin'     # 类的属性
        age = 18
    
        def eat(self):    # 类的方法
            print('{0} eating !'.format(self.name))
    
    ren = People()    # 实例化一个ren对象
    ren.eat()   # 调用对象的方法

    object是所有类的父类,不写的话,默认继承object类,当然函数可以包含注释,类也可以,在类中使用三个单引号表示注释。

    类的构造器

      __init__ 构造函数,在生成对象时调用。由于类可以起到模版的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性添加进去,通过定义一个特殊的__init__方法,我们就可以在创建实例的时候,把自定义的属性绑定上。

    class People(object):    
        '''this is my first object'''  
    
        def __init__(self,name,age):    # 类的构造函数,除了self意外的参数都需要在实例化的时候传递进去
            self.name = name   # 对象的name属性
            self.age = age    # 对象的age属性
    
    
        def eat(self):   
            print('{0} eating !'.format(self.name))
    
    ren = People('daxin',18)
    ren.eat()
    

      注意到:__init__方法的第一个参数永远是self,表示创建实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self指向了创建的实例本身。

    类的继承

      当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。

      子类具有父类的属性和方法,还记得我们之前创建的People类吗,它也是继承了object类的。

    class People(obejct):     # 父类表示人类
        pass
    
    
    class Yelloman(People):   # 继承了People类的黄种人
        pass
    
    
    class Chinapeople(yelloman,People)    # 同时继承People,yelloman的中国人
        pass 
    

    注意:

    在继承种类的构造(__init__())方法不会自动调用,需要在子类的构造方法种亲自调用

    调用方法时,首先查找子类的方法,如果没有才会去父类中查找。

    类的重写

    通过继承我们可以得到父类的各种属性或者功能,但是需要注意的是父类的__init__函数不会在继承的时候被执行, 并且如果我们想重定义父类中的某个函数,该怎么办呢?

    • 使用super函数来执行父类的__init__函数
    • 直接编写同名函数,覆盖父类函数,因为查找方式是先从子类中查找,子类中没有,才会去父类中查找。
    class People(object):   
    
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
        def eat(self):   
            print('{0} eating !'.format(self.name))
    
    class ren(People):
        
        def __init__(self,name,age,sex):
            super(ren, self).__init__(name,age)  # 使用super执行父类的__init__方法,并且传递name,age 给父类的init函数
            self.sex = sex
    
        def get_name(self):
            return self.name
    
        def get_age(self):
            return self.age
    
        def get_sex(self):
            return self.sex
    
        def eat(self):        # 如果存在和父类同名的函数,会直接覆盖父类函数
            print('hello world')
    
    a = ren('daxin',18,'men')
    print(a.get_name())
    print(a.get_age())
    print(a.get_sex())
    a.eat()
    

    类的私有属性和私有方法

    类的属性,可以称为成员变量,类的方法,可以称为成员函数。
    创建对象的过程称之为实例化:当一个对象被创建后,包含三个方面的特性:对象句柄、属性和方法。
    1. 句柄用于区分不同的对象(实例化出来的对象的名称可以称之为句柄)
    2. 对象的属性和方法与类中的成员变量和成员函数对应
    obj = myclass()  # 创建类的一个实例(对象)
    # 通过对象来调用方法和属性
    类的属性按照使用范围分为共有属性和私有属性,类的属性范围取决于属性的名称。
      - 共有属性:在类中和类外都能调用的属性
      - 私有属性:不能在类外调用的属性
    定义方式:以'__'双下滑线开始的成员变量就是私有属性
      - 可以通过instance._classname__attribute方式访问
      - 内置属性:由系统在定义类的时候默认添加的,又前后双下划线构成,(__dict__,__module__)
    例子:
    class People(object):
        color = 'yellow'
        __age = 30
        def say(self):
            self.color = 'back'
            print self.color
            print self.__age
     
    ren = People()
    ren.say()
    ren.color = 'white' ②
    ren.__dict__
    People.__dict__ ③
    ren.__age ①
    # ①:由于__age是内部变量 ,所以无法在class外部调用,我们一般把类的私有属性,在类的成员函数中调用,这样我们就可以在外部来调用类的成员函数来调用内部变量,或者使用ren._People__age注意累的名字前要加_,一般只在测试用!
    # ② 通过实例化的对象,我们就可以去修改对象的属性,但是不会影响类的成员属性
    # ③ __dict__内置函数,通过对象调用它,会把成员函数中的变量,以字典的形式存储,如果通过类调用它,它会列出类中的所有运行过程中产生的变量,并且以字典存储。
    

    类的内置方法

    既以__开头,以__结尾的方法,称之为内置方法
     
    1、__str__
    用于类被实例化后,直接打印实例化对象时,显示的提示信息,注意,这里必须要用return
    def __str__(self):
        return 'this is People object'
    2、构造函数 __init__
    用于初始化类的内部状态
    def __init__(self,name,age): -->可以添加参数
        self.name = name
        self.age = age --> 初始化的时候,自动赋值的属性
        self.talk() -->可以在初始化的时候,直接执行某些方法,用于在实例化的时候,自动执行 
    3、析构函数 __del__
    用于释放对象占用的资源,在脚本执行完毕后,自动进行资源释放(比如在构造函数中打开了某些文件,那么就可以在析构函数中关闭这些文件)
    def __del__(self):
        print('bye bye')
    

      

     

  • 相关阅读:
    lua for循环
    多面体的欧拉公式
    流形(Manifold)初步
    Laplace算子和Laplacian矩阵
    多重网格方法(Multigridmethod)
    多重网格方法
    谷歌浏览器兼容IE插件
    伽辽金法
    共轭梯度法
    有限元分析
  • 原文地址:https://www.cnblogs.com/dachenzi/p/7795348.html
Copyright © 2011-2022 走看看