美文网首页python热爱者
python之类的函数和变量

python之类的函数和变量

作者: 小怪兽狂殴奥特曼 | 来源:发表于2017-12-23 00:40 被阅读14次

1.构造函数和析构函数

类的构造函数为__init__,析构函数为__del__。这两个函数至少要有一个参数self。

class Student:
  def __init__(self):
    pass
  
  def __del__(self):
    pass

__init__和__del__都是可选的。如果用户不提供,python会提供默认的构造函数和析构函数。
创建类的对象时会自动__init__使用del来删除对象的时候会自动调用__del__。

1.1类的初始化参数

__init__的参数个数决定了创建类对象时需要的参数个数。
如果构造函数的原型为__init__(self),则类创建对象参数个数为0。创建对象时的方式为

    #类定义
    class Student:
        def __init__(self):
            pass
    #创建对象方式
    stu = Student()

如果构造函数的原型为__init__(self, x),则类创建对象参数个数为1。其它以此类推。此时创建对象的方式为

    #类定义
    class Student:
        def __init__(self, x):
            pass
    #创建对象方式
    stu = Student("a")

2.变量

2.1变量的类型

类有三种类型变量:类变量、成员变量、局部变量。先看具体的定义。
类变量:在所有函数之外,在类之内定义。
成员变量:在__init__函数内定义,以"self."开头。
局部变量:非__init__函数中定义的变量或者__init__中不以"selft."开头定义的变量。除了类变量和成员变量之外的变量。
举个例子。

class Student:
    #类变量
    count = 0
    def __init__(self, x):
        #name是一个成员变量
        self.name = x
    def SetAge(self, y)
        #age是一个局部变量
        self.age = y
        #local_var是一个局部变量
        local_var = y

2.2 类变量和成员变量的异同

2.2.1 共同点

  • 类变量和成员变量在每个对象中都有自己的拷贝。
  • 类变量和成员变量的作用于都为整个类,通过self.xxxx即可引用

2.2.2 区别

成员变量更多用于存储创建对象时需要自定义赋值,而每个对象在创建时,都拥有相同初始状态的类变量。
因此类变量更多用来存放类共有的常量,类似于C++的const变量。
举个例子。

class Student:
  __school = "MIT"
  def __init__(self, x):
    self.__age = x
  def GetAge(self):
    return self.__age
  def SetAge(self, a):
    self.__age = a
  def SetSchool(self, s):
    self.__school = s
  def GetSchool(self):
    return self.__school
  
if __name__ == "__main__":
  s1 = Student(24)
  s2 = Student(20)
  print s1.GetSchool()
  print s2.GetSchool() #s1, s2都拥有默认的__school值
  
  s1.SetSchool("Yale")
  s2.SetSchool("Harvard")
  
  print s1.GetSchool()
  print s2.GetSchool() #s1, s2 的值不同,证明类变量在每个对象都有自己的存储空间

2.3类变量的权限控制

python的类没有十分明确的权限控制,默认所有非局部变量都可以在类外部直接访问。例如

class Student:
    #类变量
    count = 0
    def __init__(self, x):
        #name是一个成员变量
        self.name = x
    def SetAge(self, y)
        #age是一个局部变量
        self.age = y
        #local_var是一个局部变量
        local_var = y
#在类外部,我们可以这样子访问
s = Student("jack")
print s.count #访问类变量,OK
print s.name #访问成员变量,OK
print s.age #访问局部变量,出错
print s.local_var #访问局部变量,出错

2.3.1 限制访问权限

我们可以限制外部对成员变量和类变量的访问,将其变成私有,使类无法在外部直接访问。具体方法是在类变量和成员变量前加"__"。例如

class Student:
    __count = 0
    def __init__(self, x):
        self.__age = x

#访问类变量和成员变量
s = Student()
print s.__count #出错
print s.__age #出错

3.函数

3.1函数的类型

类的函数类型分三种:成员函数、类函数、静态函数
成员函数:函数的第一个参数为self
类函数:用@classmethod修饰的函数
静态函数:用@staticmethod修饰的函数
访问方式分别为:
成员函数:instance.member_func()
类函数:instance.member_func()或者class_name.func()
静态函数:跟类函数一样。
要注意的是,静态函数是不可以访问任何成员变量和类变量的。类函数可以访问类变量和成员函数,但是不能直接访问成员变量。
举个例子。

class Student:
  __bar = "bar"
  def __init__(self, a):
    self.__age = a
  #成员函数
  def SetAge(self, a)
    self.__age = a
  def GetAge(self):
    return __age
  #类函数
  @classmethod
  def GetAge(cls):
    print cls.__age # 访问成员变量,出错
    print cls.__bar # 访问类变量,OK
    print cls().GetAge() # 访问成员函数,OK。注意cls的写法。
  #静态函数
  @staticmethod
  def AddAge(a, b):
    print self.__age # 不允许访问成员变量
    return a+b
  
  if __name__ == "__main__":
    s = Student(10)
    s.SetAge(20)
    print s.GetAge()
    print Student.GetAge()
    print s.AddAge(20, 21)
    print Student.AddAge(20, 21)

3.2 函数的访问权限

跟类变量一样,默认成员函数的权限为公开的。要想设置成员函数为私有,可以在函数明前加"__",即可限制为只能在类内部访问成员函数。

参考:
Python-类变量,成员变量,静态变量,类方法,静态方法,实例方法,普通函数
python中的实例方法、静态方法、类方法、类变量和实例变量浅析

相关文章

  • python之类的函数和变量

    1.构造函数和析构函数 类的构造函数为__init__,析构函数为__del__。这两个函数至少要有一个参数sel...

  • 第5天-python基础-函数与模块

    定义函数 Python中每个函数都有自己的名字、自变量和因变量。我们通常把Python中函数的自变量称为函数的参数...

  • 17、关于python中必须掌握的知识点记忆

    1、 关于python中带下划线的变量和函数的意义参考文档 关于python中带下划线的变量和函数的意义 http...

  • 函数变量和返回值

    1. 函数变量 局部变量和全局变量Python中的任何变量都有特定的作用域在函数中定义的变量一般只能在该函数内部使...

  • 三、Python函数基础

    字符串进阶 格式化输出 列表进阶 函数 变量的作用域和global变量 lambda匿名函数 python 使用 ...

  • 第011篇:高阶函数

    1、高阶函数  函数即变量 1.1、函数作为变量 Python中声明函数就是声明一个类型是function的变量,...

  • 2018-08-31 day10 文件操作

    函数作为变量 在python中,函数就是一种特殊的类型,声明函数就是声明function类型的变量。 函数作为变量...

  • Python学习笔记1

    Python注释 Python变量 Python运算符 Python输入输出 输入函数 输出函数(3.x) ...

  • 理解Python中的闭包

    Python基础 在Python中,函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。...

  • 2019-04-28函数高级用法、迭代器、生成器

    一、函数 1.函数作为变量 python中声明函数其实就是声明一个类型是function的变量,函数名其实就是变量...

网友评论

    本文标题:python之类的函数和变量

    本文链接:https://www.haomeiwen.com/subject/nprfgxtx.html