python中类的详细介绍及使用

前面我们介绍了类的创建及面向对象的三大特性。本篇将详细介绍Python 类的成员、成员修饰符、类的特殊成员。

一、类的成员

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

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

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

1、类的属性

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

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

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

1.1、静态属性的创建方式

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

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

例如:

1.2、实例属性

lass Goods:def __init__(self):# 原价self.original_price = 100# 折扣self.discount = 0.8@propertydef price(self):# 实际价格 = 原价 * 折扣new_price = self.original_price * self.discountreturn new_price@price.setterdef price(self, value):self.original_price = value@price.deleterdef price(self):del self.original_price

例如:

实例属性可以在构造方法中进行初始化。@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' + valuedef del_bar(self):return 'del_bar'age = property(fget=get_bar,fset=set_bar,fdel=del_bar,doc='description...')

例如: 

2、类的方法

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

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

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

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

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

例如:

如果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)

例如:

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

三、类的特殊成员

1、__doc__

表示类的描述信息。

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

2、 __module__ 和  __class__

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

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

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

3、__init__

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

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

4、 __del__

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

5. __call__

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

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

6. __dict__

    类或对象中的所有成员。

>>> class Province:country = 'China'def __init__(self, name, count):self.name = nameself.count = countdef 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}

7. __str__

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

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

8、__getitem__、__setitem__、__delitem__

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

9、__getslice__、__setslice__、__delslice__

三个方法用于分片操作。

10. __iter__

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

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

python中类的详细介绍及使用相关推荐

  1. python中easygui有几种_一、Python 模块EasyGui详细介绍

    Python 模块EasyGui详细介绍 EasyGui 官网: -http://easygui.sourceforge.net 官方的教学文档: -easygui-docs-0.96\tutoria ...

  2. python 偏函数_详细介绍Python中的偏函数

    机器学习实战之Logistic回归 本文来自云栖社区官方钉群"Python技术进阶",了解相关信息可以关注"Python技术进阶". 本系列教程特点: 基于&l ...

  3. 斐波那契数列 (Fibonacci) 多种实现方法(Python)与详细介绍

    斐波那契数列 Fibonacci Sequence 本文介绍了多种方式得到斐波那契数列或斐波那契数.斐波那契数列也称为"兔子数列".来源于兔子繁殖的预测.它的重要性体现在相邻两数之 ...

  4. Python精通-Python学习路线详细介绍

    导语   自从上次说完Python学习路线之后就再也没有更新过关于Python的东西,那么从这篇博客开始将对整个的Python技术栈开启以场全面的旅途,更其他系列一样,博主会不定期的更新关于Pytho ...

  5. python Pyside2模块详细介绍(一)

    文章目录 一.基础篇 1.Python图形界面开发的几种方案 2.PySide2.PyQt5 简介 3.安装 PySide2 4.安装PyQt5 5.配置Pycharm 1)自定义 QtDesigne ...

  6. 什么是整型?Python整型详细介绍

    整数类型(int)简称整型,它用于表示整数,例如,100.2016等.整型字面值的表示方式有四种,分别是十进制.二进制(以"0B"或"0b"开头).八进制(以数 ...

  7. python基本使用-Python标准库详细介绍与基本使用方式,超详细!

    目录: Python 标准库概览概览 操作系统接口 os 模块提供了很多与操作系统交互的函数: 应该用 import os 风格而非 from os import *.这样可以保证随操作系统不同而有所 ...

  8. python socket编程详细介绍

    Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络 ...

  9. 什么是整型类型?Python整型详细介绍

    整数类型(int)简称整型,它用于表示整数,例如,100.2016等.整型字面值的表示方式有四种,分别是十进制.二进制(以"0B"或"0b"开头).八进制(以数 ...

最新文章

  1. R语言可视化包ggplot2绘制分组的条形图(bar plot、柱状图)实战:多变量柱状图
  2. linux 上oracle安装
  3. 基础的重要性(程序猿之路)
  4. 设计模式(三) | 为别人做嫁衣---代理模式
  5. Spring @Resource、@Autowired、@Qualifier区别
  6. linux基础(1)-yum源配置
  7. php返回原界面,thinkphp实现登录后返回原界面
  8. leetcode 【 Sort List 】 python 实现
  9. RabbitMQ控制台队列标签的含义
  10. POJ-1681 Painter's Problem 高消
  11. 学习 shell —— 相对路径转换为绝对路径
  12. python vim 自动换行_Vim学习笔记整理
  13. 2023 刷步数网站VUE源码
  14. vue安装及创建运行
  15. LeetCode 461. 汉明距离 (布赖恩·克尼根算法)
  16. 计算机部分应用显示模糊,电脑显示器局部模糊怎么办
  17. 足球与oracle系列(4):从巴西惨败于德国,想到,差异的RAC拓扑对比!
  18. SBI集团向“Smart Card”钱包制造商投资1500万美元
  19. C语言函数大全-- o 开头的函数
  20. android 方向euler,android – 如何从旋转矢量获取欧拉角(Sensor.TYPE_ROTATION_VECTOR)

热门文章

  1. 秒杀三星、吊打华为:苹果是如何在芯片技术上做到一骑绝尘的?
  2. 硅光:数据中心互连新宠
  3. 神州租车“强制性收购”完成:将于7月8日退市,安博凯成全资股东
  4. layer弹出层的简单使用
  5. 小白想学C语言懵逼中?我告诉你撸就完事了!
  6. subunit dsp avsuite 调试问题
  7. 如何跳过等待更新,让Windows直接关机
  8. Python基础循环语句详解(for、while)
  9. 月薪超过1万的人,大概有多少?真实数据让人“大吃一惊”
  10. Spring getBean流程