python基础-函数与对象简介

简介:python函数定义,python对象简介

一. 函数

1.1 函数定义

python的函数是以 def 开头。在PHP及JS中函数都是使用 function 关键字来声明一个函数,这一点与大多数编程语言不同,大家需要注意一下。 再次声明一下,python中的代码块都是通过  : + 换行 + 4个空格 来区分代码边界的。具体格式如下:

def a():
    print('具体的函数代码块')

在python中函数的参数定义基本和其他语言一致。但是,我们在调用函数进行传参时,既可以通过顺序进行传参,也可以通过指定关键字的形式传参。具体表现如下:

def div_data(a,b):
    return a/b
# 按顺序传值
s = div_data(4,2)
print(s) # 打印结果:2

# 指定参数传值,即使顺序不一样也不影响传值
s = div_data(b=4,a=2)
print(s) # 打印结果:0.5

1.2 变量的作用域

函数中的变量属于局部变量,函数外的为全局变量。局部变量即使和全局变量名称一样,也不会影响全局变量。例如下方案例:

a = 1

def sum1(x,y):
    a = 3
    return x+y

print(sum1(4,12)) # 打印结果:16

print(a) #打印结果:1

从上面的案例可以看出,虽然我们在函数 sum1 中已经修改了变量 a 的值,但是最后打印的结果依然是 1 。这是因为函数内的变量属于局部变量,哪怕是和全局变量同名,他也是局部变量。这一点和很多编程语言不太相同,大家需要特别注意一下

如果大家想知道函数内的变量和全局变量是不是同一个,可以使用 id() 函数查询变量的内存地址

二. 对象

2.1 类的定义及实例化

类的定义比较简单,通过 class 这个关键字定义类,并且以 (): 结尾。

有点我们需要特别注意,在python的类中申明一个对象方法时,这个方法的第一个参数必须是 当前类的对象 ,一般都是用 self 表示。当然我们也可以改成 this ,不过python的编程习惯中都是用 self 。 此外,在方法中调用属性是通过 self 关键字。 具体格式如下:

class Student():
    # 构造方法
    def __init__(self):
        self.name = '学生类' #定义类的属性
        self.age = 1 #定义类的属性
    
    # 函数
    def print_code(self,value):
        print(value)
    
    # 测试属性调用
    def print_attr(self):
        print('对象名称:'+self.name)
        print('年龄'+str(self.age)) # 注意age为int类型,不能直接与字符串拼接

实例化一个类就和调用函数一样,这一点大家需要特别注意。 在其他语言中都需要通过关键 new 加类名的方式来实例化, 但是python不需要。

# 例如实例化上面的学生类
student = Student()

2.2 类属性及类方法

python中的类属性和方法类似与其他编程语言中的静态方法,但是他不是静态方法。虽然他不是静态方法,但是类方法和类属性的调用和其他编程语言中的静态方法很相似,都是通过直接调用。此外,类方法的第一个参数必须存在,并且,第一个参数是当前类,python编程习惯使用 cls 来表示。具体方式如下:

class Student():
    # 定义类属性
    sum1 = 0
    
    # 对象方法中测试静态属性调用
    def print_attr(self):
        self.__class__.sum1 = 3
        # 或者是
        Student.sum1 = 3

    # 定义类方法
    @classmethod
    def class_func(cls):
        cls.sum1 += 1
        print(cls.sum1)
        print('这是类方法')

@classmethod是一个装饰器,他代表了当前方法为类方法

在上述代码中,对象方法中调用类属性时,有两种方式。第一种是通过 __class__ 关键字调用,第二种是通过 当前直接调用

类方法和类属性定义好之后,我们就可以通过类进行调用了,不过类方法和属性不仅可以通过类方法调用,还可以通过对象调用:

# 例如实例化上面的学生类
st = Student()

# 通过对象调用类方法
st.class_func()

# 使用类直接调用类方法
Student.class_func()

2.3 静态方法的定义

静态方法的定义和类方法的定义有点相似,都是通过一个装饰器来定义。静态方法的装饰器是 @staticmethod ,但是静态方法和类方法不同,没有第一个默认参数。具体代码形式如下:

class Student():
    # 定义静态方法
    @staticmethod
    def static_func():
        print('这是静态方法')

静态方法的调用和类方法的调用一样,都可以通过对象或者类直接调用。

2.4 类的继承

类的继承有点类似与函数的参数,直接通过定义类时的 () 进行。在类的继承有一点需要特别注意,调用父类方法时有两种方法,一种是直接通过父类直接调用,还有一种是通过 super() 函数调用父类方法。

关于类的权限问题,在python中属性没有权限这么一说,但是方法可以通过在方法是前面加 双下划线 来进行私有化

具体代码方式如下:

class People():
    def __init__(self,name,age):
        self.name = name #定义类的属性
        self.age = age #定义类的属性

class Student(People):
    sum1 = 0

    def __init__(self,name,age):
        # 调用父类方法
        People.__init__(self,name,age)
        # 调用父类方法二
        super().init(name,age)
    
    @staticmethod
    def static_func():
        print('静态方法')
    
    # 定义私有化的方法
    def __private_func(self):
        print('私有方法')

# 实例化对象
st = Student('小米',11)
# 通过对象调用静态方法
st.static_func()
# 通过类调用静态方法
Student.static_func()

2.5 析构方法

析构方法就是对象销毁的时候调用的对象方法,例如下发示例,代码执行结束后自动调用析构方法:

class Student():
    # 构造方法
    def __del__(self):
        print('对象注销')
st = Student()

我们还可以通过给对象赋值为 None 进行 注销对象

在这里给大家科普一个知识,python的对象属性都存储在 __dict__ 变量中,我们可以通过这个变量查询当前对象的所有属性,具体方法如下:

class Student():
    # 构造方法
    def __init__(self):
        self.name = '学生类' #定义类的属性
        self.age = 1 #定义类的属性
st = Student()
# 查看当前对象的所有属性列表
st.__dict__

有遗漏或者不对的可以在我的公众号留言哦

编程经验共享公众号二维码

编程经验共享公众号二维码
更多内容关注公众号
Copyright © 2021 编程经验共享 赣ICP备2021010401号-1