首页Python【Python基础】17....

【Python基础】17.类(class)的创建及实例化


本系列文章配套代码获取有以下三种途径:

  • 可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):

https://returu.github.io/Python_Basic/lab/index.html
链接:https://pan.baidu.com/s/1x2Ynh_VibPY2u-HWTaJo8w?pwd=mnsj 提取码:mnsj
  • 前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Python_Basic

—————————————————

Python中使用类(class)来实现面向对象编程。

类是包含数据(变量,称为属性)和代码(函数,称为方法)的自定义数据结构。

1.创建及实例化类:

1.1  使用class定义类:
要创建一个先前没有的新对象,首先要定义类,指明其中包含的内容。
Python中创建自定义对象,需要使用class关键字定义类。
1class <类的名称>:
2    <语句块>

定义完类后,系统会创建一个类对象(Class Object)。
下面的代码定义了一个空类CarClass:
1class CarClass:
2    pass

1.2 根据类创建实例:
根据类来创建对象称为实例化。可以像函数一样调用类名(类名加圆括号),来创建该类的对象。
可根据一个类创建任意数量的实例,条件是将每个实例都存储在不同的变量中,或者占用列表或字典的不同位置。
下面调用CarClass()创建了CarClass类的两个对象,将其分别赋给a_caranother_car
1a_car = CarClass()
2another_car = CarClass()

2.定义类的动态属性:
2.1 添加动态属性:
在创建类的实例化后,可以根据需要添加动态属性。
下面为空类动态添加属性。
 1# 定义一个空类
2>>class CarClass:
3...     pass
4
5# 实例化一个对象a_car
6>>> a_car = CarClass()
7
8# 为该对象添加动态属性并赋值
9>>> a_car.brand = 'audi'
10>>> a_car.category = 'SUV'
11
12# 访问属性
13>>> a_car.brand , a_car.category
14('audi''SUV')

2.2 删除动态属性:
使用del加对象属性的方式,即可删除属性。
下面删除之前添加的type属性,删除之后再次访问该属性会报错。
1>>> del a_car.category
2>>> a_car.category
3AttributeError: 'CarClass' object has no attribute 'category'

2.3 限制类属性(__slots__):
上面介绍可以为实例化后的对象任意添加动态属性,在提升灵活性的同时,也容易产生误操作,使类对象失去控制。
为防止上述情况,可以在类中对__slots__这一特殊变量赋值(类的属性名称组成的元祖形式),从而限制类的属性。
在一个类中一旦为__slots__这一特殊变量赋值,则该类的实例化对象就只能添加__slots__中所指定的属性。
 1# 定义一个空类
2>>class CarClass:
3...     __slots__ = ('brand' , 'category')
4
5# 实例化一个对象a_car
6>>> a_cat = CarClass()
7
8# 为该对象添加__slots__中规定的动态属性并赋值
9>>> a_cat.brand = 'audi'
10>>> a_cat.category 'SUV'
11
12# 为该对象添加其他动态属性
13>>> a_cat.price = '20'
14AttributeError: 'CarClass' object has no attribute 'price'

3.带有初始值的实例化:
对于一些功能复杂的类,可能需要在实例化的同时为其初始化一些必须的属性变量,这就是带有初始值的实例化。
3.1 初始化方法(__init__):
如果想在创建对象时带有初始化值,需要在定义类的时候,使用特殊的Python对象初始化方法__init__():

__init__()是Python中特殊的方法名称,该方法用于在类定义中初始化对象。在类定义编写__init__()时,第一个参数应该是selfself参数指定了引用的是此对象本身。

下面创建一个简单对象(CarClass)并分配其属性,本次向初始化方法加入brand、type参数:

 1# 定义一个空类
2>>class CarClass:
3...     def __init__(self , brand , category):
4...         self.brand = brand
5...         self.category = category
6
7# 通过向参数传递对应值,创建一个Car对象
8>>> a_car = CarClass('audi' , 'SUV')
9
10# 访问属性
11>>> a_car.brand , a_car.category
12('audi''SUV')

3.2 默认调用的__init__:
在类的实例化时,系统都会在内部调用__init__()方法。
如果在类中没实现初始化函数,在实例化时也会调用内部默认的__init__()方法;如果在类中实现了初始化函数,系统会优先调用自定义的__init__()方法。
1# 定义一个空类
2>>class CarClass:
3...     def __init__(self):
4...         print("即使没有初始值也会调用__init__。")
5
6# 实例化一个对象a_car
7>>> a_cat = CarClass()
8即使没有初始值也会调用__init__

4.类的内置属性:
Python中的类有一些相同的用于维护类的基本信息的内置属性。
内置属性
描述
__name__
类名称
__doc__ 类的文档字符串
__module__ 类所在的模块,如果直接运行当前文件,返回值为__main__
__base__ 该类所有的父类,为tuple类型对象
__dict__ 该类所有的属性,为dict类型对象

 1# 定义一个空类
2>>class CarClass:
3...     """
4...     用于描述类的文档字符串
5...     """

6...     def __init__(self , brand , category):
7...         self.brand = brand
8...         self.category = category
9
10>>> CarClass.__name__
11'CarClass'
12>>> CarClass.__doc__
13'n    用于描述类的文档字符串n    '
14>>> CarClass.__module__
15'__main__'
16>>> CarClass.__base__
17object
18>>> CarClass.__dict__
19mappingproxy({'__module__''__main__',
20              '__doc__''n    用于描述类的文档字符串n    ',
21              '__init__': <function __main__.CarClass.__init__(self, brand, category)>,
22              '__dict__': <attribute '__dict__' of 'CarClass' objects>,
23              '__weakref__': <attribute '__weakref__' of 'CarClass' objects>})

本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments