简介: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__
有遗漏或者不对的可以在我的公众号留言哦