Python 中的类(上)
admin
2023-07-30 22:38:31
0

在Python中,可以通过class关键字定义自己的类,然后通过自定义的类对象类创建实例对象。

例如,下面创建了一个Student的类,并且实现了这个类的初始化函数”__init__”:

1234567 class Student(object):    count = 0    books = []    def __init__(self, name, age):        self.name = name        self.age = age    pass

接下来就通过上面的Student类来看看Python中类的相关内容。

 

数据属性

在上面的Student类中,”count””books””name”和”age”都被称为类的数据属性,但是它们又分为类数据属性和实例数据属性。

类数据属性和实例数据属性

首先看一段代码,代码中分别展示了对类数据属性和实例数据属性的访问:

12345678910111213141516171819202122232425262728 Student.books.extend([\”python\”, \”javascript\”])  print \”Student book list: %s\” %Student.books    # class can add class attribute after class definationStudent.hobbies = [\”reading\”, \”jogging\”, \”swimming\”]print \”Student hobby list: %s\” %Student.hobbies    print dir(Student) print  wilber = Student(\”Wilber\”, 28) print \”%s is %d years old\” %(wilber.name, wilber.age)   # class instance can add new attribute # \”gender\” is the instance attribute only belongs to wilberwilber.gender = \”male\”print \”%s is %s\” %(wilber.name, wilber.gender)   # class instance can access class attributeprint dir(wilber)wilber.books.append(\”C#\”)print wilber.books print  will = Student(\”Will\”, 27) print \”%s is %d years old\” %(will.name, will.age)   # will shares the same class attribute with wilber# will don\’t have the \”gender\” attribute that belongs to wilberprint dir(will)     print will.books

通过内建函数dir(),或者访问类的字典属性__dict__,这两种方式都可以查看类有哪些属性,代码的输出为:

对于类数据属性和实例数据属性,可以总结为:

  1. 类数据属性属于类本身,可以通过类名进行访问/修改
  2. 类数据属性也可以被类的所有实例访问/修改
  3. 在类定义之后,可以通过类名动态添加类数据属性,新增的类属性也被类和所有实例共有
  4. 实例数据属性只能通过实例访问
  5. 在实例生成后,还可以动态添加实例数据属性,但是这些实例数据属性只属于该实例

特殊的类属性

对于所有的类,都有一组特殊的属性:

类属性 含义
__name__ 类的名字(字符串)
__doc__ 类的文档字符串
__bases__ 类的所有父类组成的元组
__dict__ 类的属性组成的字典
__module__ 类所属的模块
__class__ 类对象的类型

通过这些属性,可以得到 Student类的一些信息:

1234567891011121314151617 class Student(object):    \’\’\’    this is a Student class    \’\’\’    count = 0    books = []    def __init__(self, name, age):        self.name = name        self.age = age    pass print Student.__name__print Student.__doc__print Student.__bases__print Student.__dict__print Student.__module__print Student.__class

代码输出为:

属性隐藏

从上面的介绍了解到,类数据属性属于类本身,被所有该类的实例共享;并且,通过实例可以去访问/修改类属性。但是,在通过实例中访问类属性的时候一定要谨慎,因为可能出现属性”隐藏”的情况。

继续使用上面的Student类,来看看属性隐藏:

1234567tax crayon-theme-github crayon-font-monaco crayon-os-pc print-yes notranslate\” data-settings=\” minimize scroll-always\” style=\” margin-top: 12px; margin-bottom: 12px; font-size: 13px !important; line-height: 15px !important;\”>

1234567 class Student(object):    count = 0    books = []    def __init__(self, name, age):        self.name = name        self.age = age    pass

接下来就通过上面的Student类来看看Python中类的相关内容。

 

数据属性

在上面的Student类中,”count””books””name”和”age”都被称为类的数据属性,但是它们又分为类数据属性和实例数据属性。

类数据属性和实例数据属性

首先看一段代码,代码中分别展示了对类数据属性和实例数据属性的访问:

12345678910111213141516171819202122232425262728 Student.books.extend([\”python\”, \”javascript\”])  print \”Student book list: %s\” %Student.books    # class can add class attribute after class definationStudent.hobbies = [\”reading\”, \”jogging\”, \”swimming\”]print \”Student hobby list: %s\” %Student.hobbies    print dir(Student) print  wilber = Student(\”Wilber\”, 28) print \”%s is %d years old\” %(wilber.name, wilber.age)   # class instance can add new attribute # \”gender\” is the instance attribute only belongs to wilberwilber.gender = \”male\”print \”%s is %s\” %(wilber.name, wilber.gender)   # class instance can access class attributeprint dir(wilber)wilber.books.append(\”C#\”)print wilber.books print  will = Student(\”Will\”, 27) print \”%s is %d years old\” %(will.name, will.age)   # will shares the same class attribute with wilber# will don\’t have the \”gender\” attribute that belongs to wilberprint dir(will)     print will.books

通过内建函数dir(),或者访问类的字典属性__dict__,这两种方式都可以查看类有哪些属性,代码的输出为:

对于类数据属性和实例数据属性,可以总结为:

  1. 类数据属性属于类本身,可以通过类名进行访问/修改
  2. 类数据属性也可以被类的所有实例访问/修改
  3. 在类定义之后,可以通过类名动态添加类数据属性,新增的类属性也被类和所有实例共有
  4. 实例数据属性只能通过实例访问
  5. 在实例生成后,还可以动态添加实例数据属性,但是这些实例数据属性只属于该实例

特殊的类属性

对于所有的类,都有一组特殊的属性:

类属性 含义
__name__ 类的名字(字符串)
__doc__ 类的文档字符串
__bases__ 类的所有父类组成的元组
__dict__ 类的属性组成的字典
__module__ 类所属的模块
__class__ 类对象的类型

通过这些属性,可以得到 Student类的一些信息:

1234567891011121314151617 class Student(object):    \’\’\’    this is a Student class    \’\’\’    count = 0    books = []    def __init__(self, name, age):        self.name = name        self.age = age    pass print Student.__name__print Student.__doc__print Student.__bases__print Student.__dict__print Student.__module__print Student.__class

代码输出为:

属性隐藏

从上面的介绍了解到,类数据属性属于类本身,被所有该类的实例共享;并且,通过实例可以去访问/修改类属性。但是,在通过实例中访问类属性的时候一定要谨慎,因为可能出现属性”隐藏”的情况。

继续使用上面的Student类,来看看属性隐藏:

1234567ayon-striped-num\” data-line=\”crayon-5812b46528664355218622-8\”>891011

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...