• python之面向对象


    函数

    1、定义

    def xx():
        pass
    
    • 使用关键字def定义函数
    • 函数相当于java中的static方法,可以不用创建对象而直接进行调用

    2、返回

    def xx():
        return '123'
    a = xx()
    
    • 使用关键字return可以定义函数的返回
    • 如果没有return语句,或者return语句后面没有值,则相当于返回None

    3、参数

    def xx(a, b, c):
        print(a, b, c)
    xx(1,'22','df')
    
    • 调用函数传入参数时,形参和实参的个数必须匹配,否则会报错

    4、参数名传值

    def xx(a, b, c):
        print(a, b, c)
    xx(1,c='22',b='df')
    
    • 某个实参使用参数名传值时,其后的实参也必须使用参数名传值

    5、默认参数值

    def xx(a, b=123, c='fd'):
        print(a, b, c)
    xx(1,'22')
    xx(1,c='22')
    
    • 在声明时,如果某个形参声明了默认值,则其后的形参也必须设置默认值
    • 在传参时,针对设置了默认参数的参数,如果不传入新值,则使用默认值

    6、不定长参数

    def f1(a, b, *c):.
    	print(a,b,c)
    f1(1,2,3,4,5)
    

    1 2 (3, 4, 5)

    • 用*来定义不定长的参数,为元组类型,必须放在定义的最后
    def f2(a, b, **c):
        print(a,b,c)
    f2(1,2,d=3,e=4)
    

    1 2 {'d': 3, 'e': 4}

    • 用**来定义不定长的参数,为字典类型,必须放在函数定义的最后
    def f3(a, b, *c, **d):
        print(a,b,c,d)
    f3(1,2,5,d=3,e=4)
    

    1 2 (5,) {'d': 3, 'e': 4}

    • 同时使用*和**定义

    7、匿名函数

    lambda [arg1 [,arg2,.....argn]]:expression
    
    sum = lambda arg1, arg2: arg1 + arg2
     
    # 调用sum函数
    print ("相加后的值为 : ", sum( 10, 20 ))
    

    8、传值和传地址

    number、str、tuple为不可变对象,为传值

    list、dict、set为可变对象,为传地址

    9、作用域

    全局变量:声明在函数外的变量

    局部变量:声明在函数内的变量,(声明在if等控制结构体内的变量可以在结构体外直接使用)

    name = 'abc'
    def p():
        global name
        name = 12
    
    • 如果是在函数内获取全局变量的值,可以不使用global关键字而直接使用
    • 如果需要对全局变量进行修改,则必须先使用global关键字进行声明
    • 如果在函数内声明了与全局变量同名的变量,则优先使用局部变量

    10、关于重载

    在python中没有重载机制,要求通过函数的参数列表机制来实现类似要求

    如果函数中声明了同名的函数,则只加载最后一个同名函数

    类和对象

    1、类的声明和对象的创建

    class stu():
        name = 'tx'
        def set_age(self, age):
            self.age = age
    s = stu()
    s.set_age(20)
    print(s.name, s.age)
    
    • 通过关键字class来定义类,其后为类名,如果没有继承,类名后的圆括号可以省略
    • 类有属性和方法,通过.操作符进行调用
    • 类的属性有两种创建方法:
      • 在类中方法外进行声明
      • 在方法中,直接通过self调用对象的属性,如果不存在,则会创建
    • 类的方法通过关键字def声明,其与函数的使用类似
    • 类中方法必须至少有一个参数,每个方法的第一个参数表示类的对象本身,一般为self,也可以为this等其它命名
    • 通过self可以调用其属性和方法

    2、私有

    __private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。

    __private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用

    3、类的专有方法:

    • init : 构造函数,在生成对象时调用
    • del : 析构函数,释放对象时使用
    • repr : 打印,转换
    • setitem : 按照索引赋值
    • getitem: 按照索引获取值
    • len: 获得长度
    • cmp: 比较运算
    • call: 函数调用
    • add: 加运算
    • sub: 减运算
    • mul: 乘运算
    • truediv: 除运算
    • mod: 求余运算
    • pow: 乘方

    4、命名空间/作用域

    Python 的作用域一共有4种,分别是:

    有四种作用域:

    • L(Local):最内层,包含局部变量,比如一个函数/方法内部。
    • E(Enclosing):包含了非局部(non-local)也非全局(non-global)的变量。比如两个嵌套函数,一个函数(或类) A 里面又包含了一个函数 B ,那么对于 B 中的名称来说 A 中的作用域就为 nonlocal。
    • G(Global):当前脚本的最外层,比如当前模块的全局变量。
    • B(Built-in): 包含了内建的变量/关键字等,最后被搜索。

    规则顺序: L –> E –> G –> B。

    在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。

    5、继承

    多继承,子类覆盖

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

    模块

    (1)介绍

    模块本质上就是一个py文件,或者多个文件组成一个文件夹或者多层文件夹

    py文件中存放有编写好的函数或者类,开发者可以导入直接使用,而不需要再次编写,有助于提高开发效率

    模块的来源:

    • python安装时自带的、官方的、内置的、标准的
    • 第三方的
    • 开发者自行准备的

    (2)导入

    假设在文件夹t下的tool.py下有函数print_str()

    在tool.py同级目录下的py文件,可以通过以下两种方式使用

    # 方式1
    import tool
    tool.print_str()
    # 方式2
    from tool import *
    print_str()
    

    如果不是同级目录下的py我呢见调用,则可以通过t.tool指向tool.py文件,替代两种方法中的tool

    注意:如果引入过多未使用的库,会极大地影响项目的加载启动时间,并且占用内存资源,影响程序运行效率

  • 相关阅读:
    用户空间与内核空间,进程上下文与中断上下文[总结]【转】
    select、poll、epoll之间的区别总结[整理]【转】
    v4l2驱动文档之——streaming IO【转】
    Linux网络编程一步一步学【转】
    V4L2驱动的移植与应用(二+三)【转】
    【PHP面向对象(OOP)编程入门教程】20.PHP5接口技术(interface)
    【PHP面向对象(OOP)编程入门教程】19.抽象方法和抽象类(abstract)
    【PHP面向对象(OOP)编程入门教程】18.__call()处理调用错误
    【PHP面向对象(OOP)编程入门教程】17.克隆对象__clone()方法
    【PHP面向对象(OOP)编程入门教程】16.__toString()方法
  • 原文地址:https://www.cnblogs.com/heibaimao123/p/16282790.html
Copyright © 2020-2023  润新知