详细介绍python类及类的用法


Posted in Python onMay 31, 2021

一、类的成员

类的成员包括:属性和方法。

属性可以分为:静态属性和实例属性

方法可以分为:普通方法、类方法和静态方法。

    详细介绍python类及类的用法

1.1 类的属性

属性可以分为:静态属性和实例属性。

实例属性属于对象,而静态属性属于类。

通过类创建对象时,如果每个对象都具有相同的属性,那么就使用静态属性。

1.1.1 静态属性的创建方式

静态属性是属于类的,所以不用创建对象访问。

class Province:
 
    # 静态字段
    country = '中国'
 
 
# 直接访问静态字段
Province.country

例如:

详细介绍python类及类的用法

1.1.2 实例属性

lass Goods:
 
    def __init__(self):
        # 原价
        self.original_price = 100
        # 折扣
        self.discount = 0.8
 
    @property
    def price(self):
        # 实际价格 = 原价 * 折扣
        new_price = self.original_price * self.discount
        return new_price
 
    @price.setter
    def price(self, value):
        self.original_price = value
 
    @price.deleter
    def price(self):
        del self.original_price

例如:

详细介绍python类及类的用法

实例属性可以在构造方法中进行初始化。@property装饰器可以把一个实例方法变成其同名属性,以支持.号访问。我们可以根据属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除。

扩展:

对于静态属性还可以使用property函数的形式定义一个属性。与@property实现原理类似。

property(fget=None, fset=None, fdel=None, doc=None)

class Foo:
 
    def get_bar(self):
        return 'get_bar'
 
    # *必须两个参数
    def set_bar(self, value): 
        return 'set value' + value
 
    def del_bar(self):
        return 'del_bar'
 
    age = property(fget=get_bar,fset=set_bar,fdel=del_bar,doc='description...')

例如:

 详细介绍python类及类的用法

1.2 类的方法

方法包括:普通方法、类方法和静态方法。

普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self

类方法:由调用; 至少一个cls参数;执行类方法时,自动将调用该方法的复制给cls

静态方法:由调用;无默认参数;

class Foo:
 
    def __init__(self, name):
        self.name = name
 
    def ord_func(self):
        """ 定义普通方法,至少有一个self参数 """
        # print self.name
        print('普通方法')
 
    @classmethod
    def class_func(cls):
        """ 定义类方法,至少有一个cls参数 """
        print('类方法')
 
    @staticmethod
    def static_func():
        """ 定义静态方法 ,无默认参数"""
        print('静态方法')

例如:

详细介绍python类及类的用法

如果Python中没有属性,方法完全可以代替其功能。

二、类成员的修饰符

对于每一个类的成员而言都有两种形式:

公有成员,在任何地方都能访问。

私有成员,只有在类的内部才能方法。

私有成员和公有成员的定义不同:私有成员命名时,前两个字符是下划线。(特殊成员除外,例如:__init__、__call__、__dict__等)

ps:如果想要强制访问私有字段,可以通过 【对象._类名__私有字段明 】访问(如:obj._C__foo),不建议强制访问私有成员。

class C:
	name = '公有静态字段'
	__sname ='私有静态字段'
 
	def pub_func(self):
		print(C.name)
 
	def pra_func(self):
		print(C._sname)
 
class D(C):
 
	def pub_show(self):
		print(C.name)
 
	def pra_show(self):
		print(C._sname)

例如:

详细介绍python类及类的用法

注:不建议强制访问私有成员。

三、类的特殊成员

3.1 __doc__

表示类的描述信息。

>>> class Foo:
    """ 描述类信息,这是用于看片的神奇 """
 
    def func(self):
        pass
 
>>> Foo.__doc__
' 描述类信息,这是用于看片的神奇

3.2  __module__ 和  __class__

__module__ 表示当前操作的对象在哪个模块

__class__     表示当前操作的对象的类是什么

>>> class Foo:
    """ 描述类信息,这是用于看片的神奇 """
 
    def func(self):
        pass
>>> obj = Foo()
>>> obj.__module__
'__main__'
>>> obj.__class__
<class '__main__.Foo'>

3.3 __init__

构造方法,通过类创建对象时,自动触发执行。

>>> class Foo:
 
    def __init__(self, name):
        self.name = name
        self.age = 18
 
        
>>> obj = Foo('test')
>>> obj.name
'test'

3.4  __del__

当对象在内存中被释放时,自动触发执行。

3.5 __call__

对象后面加括号,触发执行。

>>> class Foo:
 
    def __init__(self):
        pass
    
    def __call__(self, *args, **kwargs):
 
        print('__call__')
 
        
>>> obj = Foo()
>>> obj()
__call__

3.6 __dict__

类或对象中的所有成员。

>>> class Province:
 
    country = 'China'
 
    def __init__(self, name, count):
        self.name = name
        self.count = count
 
    def func(self, *args, **kwargs):
        print('func')
>>> print(Province.__dict__) # 获取类的成员,即:静态字段、方法
{'__module__': '__main__', 'country': 'China', '__init__': <function Province.__init__ at 0x0000000002F39820>, 'func': <function Province.func at 0x0000000002F398B0>, '__dict__': <attribute '__dict__' of 'Province' objects>, '__weakref__': <attribute '__weakref__' of 'Province' objects>, '__doc__': None}
>>> obj1 = Province('jiangxi',10000)
>>> print(obj1.__dict__) #获取 对象obj1 的成员
{'name': 'jiangxi', 'count': 10000}

3.7  __str__

如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。有点像java中的toString方法。

>>> class Foo:
 
    def __str__(self):
        return 'test'
 
>>> obj = Foo()
>>> print(obj)
test

3.8 __getitem__、__setitem__、__delitem__

用于索引操作,如字典。以上分别表示获取、设置、删除数据。

3.9 __getslice__、__setslice__、__delslice__

三个方法用于分片操作。

3.10 __iter__

用于迭代器,之所以列表、字典、元组可以进行for循环,是因为类型内部定义了 __iter__。

>>> class Foo(object):
 
    def __init__(self, sq):
        self.sq = sq
 
    def __iter__(self):
        return iter(self.sq)
>>> for i in obj:
	print(i)
11
22
33
44
>>>

到此这篇关于详细介绍python类的使用的文章就介绍到这了,更多相关python类的使用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python搭建简易服务器分析与实现
Dec 15 Python
python批量提交沙箱问题实例
Oct 08 Python
Python中使用PDB库调试程序
Apr 05 Python
Windows下搭建python开发环境详细步骤
Jul 20 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
Mar 13 Python
python 异或加密字符串的实例
Oct 14 Python
python 利用jinja2模板生成html代码实例
Oct 10 Python
python深copy和浅copy区别对比解析
Dec 26 Python
Python包,__init__.py功能与用法分析
Jan 07 Python
python pprint模块中print()和pprint()两者的区别
Feb 10 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
May 25 Python
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
Apr 11 Python
教你怎么用PyCharm为同一服务器配置多个python解释器
用python批量解压带密码的压缩包
May 31 #Python
变长双向rnn的正确使用姿势教学
如何在Python项目中引入日志
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
Python数据类型最全知识总结
May 31 #Python
教你怎么用Python操作MySql数据库
You might like
微信API接口大全
2015/04/15 PHP
PHP实现webshell扫描文件木马的方法
2017/07/31 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
一个背景云变换js特效 鼠标移动背景云变化
2012/12/28 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
2015/08/23 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
vue组件实现文字居中对齐的方法
2017/08/23 Javascript
Webpack中publicPath路径问题详解
2018/05/03 Javascript
基于游标的分页接口实现代码示例
2018/11/12 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
微信小程序使用Vant Weapp组件库的方法步骤
2019/08/01 Javascript
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
Vue使用预渲染代替SSR的方法
2020/07/02 Javascript
vue将data恢复到初始状态 &amp;&amp; 重新渲染组件实例
2020/09/04 Javascript
[54:18]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS BO3 第一场 1月22日
2021/03/11 DOTA
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
2018/02/22 Python
浅谈Python中的全局锁(GIL)问题
2019/01/11 Python
Python控制Firefox方法总结
2019/06/03 Python
Python如何使用argparse模块处理命令行参数
2019/12/11 Python
在pytorch中对非叶节点的变量计算梯度实例
2020/01/10 Python
Python闭包及装饰器运行原理解析
2020/06/17 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
Html5监听手机摇一摇事件的实现
2019/11/07 HTML / CSS
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
写好求职信第一句话的技巧
2013/10/26 职场文书
毕业生就业意向书
2014/04/01 职场文书
《从现在开始》教学反思
2014/04/15 职场文书
代收款委托书范本
2014/10/01 职场文书
财政局党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
2016年乡镇七一建党节活动总结
2016/04/05 职场文书