Python 面向对象之类class和对象基本用法示例


Posted in Python onFebruary 02, 2020

本文实例讲述了Python 面向对象之类class和对象基本用法。分享给大家供大家参考,具体如下:

类(class):定义一件事物的抽象特点,usually,类定义了事物的属性和它可以做到的性为

对象(object):是类的实例。

1.基本点

class MyClass(object):
  message = "hello,world"
  def show(self):
    print (self.message)

类名为MyClass 有一个成员变量:message,并赋予初值
类中定义了成员函数show(self),注意类中的成员函数必须带有参数self
参数self是对象本身的引用,在成员函数中可以引用self参数获得对象的信息

输出结果:

inst = Myclass() # 实例化一个MyClass 的对象
inst.show # 调用成员函数,无需传入self参数
hello,world

注: 通过在类名后面加小括号可以直接实例化类来获得对象变量,使用对象变量可以访问类的成员函数与成员变量。

2.构造函数

构造函数是一种特殊的类成员方法,主要用来创建对象初始化,python 中的类构造函数用__init__命名:

class MyClass(object):
  message = 'Hello, Developer.'
  def show(self):
    print self.message
  def __init__(self):
    print "Constructor is called"
inst = MyClass()
inst.show()
>>>

打印结果:

>>>Constructor is called
>>>Hello, Developer.

注:构造函数不能有返回值,python 中不能定义多个构造函数,但可以通过为命名参数提供默认值的方式达到用多种方式构造对象的目的。

3.析构函数

是构造的反向函数,在销毁或者释放对象时调用他们。

python 中为类定义析构函数的方法在类定义中定义一个名为__del__的没有返回值和参数的函数。

class MyClass(object):
  message = 'Hello, Developer.'
  def show(self):
    print self.message
  def __init__(self, name = "unset", color = "black"):
    print "Constructor is called with params: ",name, " ", color
  def __del__(self):
    print "Destructor is called!"
inst = MyClass()
inst.show()
inst2 = MyClass("David")
inst2.show()
del inst, inst2
inst3 = MyClass("Lisa", "Yellow")
inst3.show()
del inst3
>>>

打印结果:

Constructor is called with params:  unset   black
Hello, Developer.
Constructor is called with params:  David   black
Hello, Developer.
Destructor is called!
Destructor is called!
Constructor is called with params:  Lisa   Yellow
Hello, Developer.
Destructor is called!

4.实例成员变量

构造函数中定义self引用的变量,因此这样的成员变量在python中叫做实例成员变量。

def __init__(self, name = "unset", color = "black"):
  print "Constructor is called with params: ",name, " ", color
  self.name = name
  self.color = color

5.静态函数和类函数:

python 支持两种基于类名访问成员的函数:静态函数,类函数。
区别在于:类函数有一个隐形参数cls可以用来获取类信息。而静态函数没有该函数。
静态函数用装饰器:@staticmethod定义
类函数使用装饰器:@classmethod定义

class MyClass(object):
  message = 'Hello, Developer.'
  def show(self):
    print (self.message)
    print ("Here is %s in %s!" % (self.name, self.color))
  @staticmethod
  def printMessage():
    print ("printMessage is called")
    print (MyClass.message)
  @classmethod
  def createObj(cls, name, color):
    print ("Object will be created: %s(%s, %s)"% (cls.__name__, name, color))
    return cls(name, color)
  def __init__(self, name = "unset", color = "black"):
    print ("Constructor is called with params: ",name, " ", color)
    self.name = name
    self.color = color
  def __del__(self):
    print ("Destructor is called for %s!"% self.name)
MyClass.printMessage()
inst = MyClass.createObj( "Toby", "Red")
print (inst.message)
del inst

输出结果:

printMessage is called
Hello, Developer.
Object will be created: MyClass(Toby, Red)
Constructor is called with params:  Toby   Red
Hello, Developer.
Destructor is called for Toby!

6.私有成员

python 使用指定变量名格式的方法定义私有成员,即所有以双下划线“__”开始命名的成员都为私有成员。

class MyClass(object):
  def __init__(self, name = "unset", color = "black"):
    print "Constructor is called with params: ",name, " ", color
    self.__name = name
    self.__color = color
  def __del__(self):
    print "Destructor is called for %s!"% self.__name
inst = MyClass("Jojo", "White")
del inst

输出结果:

Constructor is called with params:  Jojo   White
Destructor is called for Jojo!

注明:书《Python 高效开发实战Django, Tornado, Flask, Twisted》总结

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
举例讲解Python中的算数运算符的用法
May 13 Python
解决Python的str强转int时遇到的问题
Apr 09 Python
matplotlib实现热成像图colorbar和极坐标图的方法
Dec 13 Python
PyQt5实现QLineEdit添加clicked信号的方法
Jun 25 Python
python字典排序的方法
Oct 12 Python
python的等深分箱实例
Nov 22 Python
pandas 对group进行聚合的例子
Dec 27 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
Feb 26 Python
Python3 shelve对象持久存储原理详解
Mar 23 Python
解决python中0x80072ee2错误的方法
Jul 19 Python
windows系统Tensorflow2.x简单安装记录(图文)
Jan 18 Python
opencv检测动态物体的实现
Jul 21 Python
flask 框架操作MySQL数据库简单示例
Feb 02 #Python
python orm 框架中sqlalchemy用法实例详解
Feb 02 #Python
使用Python操作ArangoDB的方法步骤
Feb 02 #Python
详解有关PyCharm安装库失败的问题的解决方法
Feb 02 #Python
Python 模拟生成动态产生验证码图片的方法
Feb 01 #Python
Python递归及尾递归优化操作实例分析
Feb 01 #Python
Python异步编程之协程任务的调度操作实例分析
Feb 01 #Python
You might like
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
2014/04/08 PHP
Yii实现自动加载类地图的方法
2015/04/01 PHP
PHP几个实用自定义函数小结
2016/01/25 PHP
php输出含有“#”字符串的方法
2017/01/18 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
让焦点自动跳转
2006/07/01 Javascript
JavaScript 变量基础知识
2009/11/07 Javascript
jQuery页面图片伴随滚动条逐渐显示的小例子
2013/03/21 Javascript
JS对img标签进行优化使用onerror显示默认图像
2014/04/24 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
JavaScript动态添加style节点的方法
2015/06/09 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
2016/08/11 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
2016/09/04 Javascript
Vuex之理解state的用法实例
2017/04/19 Javascript
Node.js连接mongodb实例代码
2017/06/06 Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
2019/02/02 Javascript
微信小程序基础教程之worker线程的使用方法
2019/07/15 Javascript
node 文件上传接口的转发的实现
2019/09/23 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
vue-cli3 引入 font-awesome的操作
2020/08/11 Javascript
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
Python中itertools模块用法详解
2014/09/25 Python
python删除列表内容
2015/08/04 Python
python交互式图形编程实例(一)
2017/11/17 Python
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
Python中将变量按行写入txt文本中的方法
2018/04/03 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
2019/08/31 Python
Pytorch 实现focal_loss 多类别和二分类示例
2020/01/14 Python
PyQt使用QPropertyAnimation开发简单动画
2020/04/02 Python
python适合做数据挖掘吗
2020/06/16 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
餐饮加盟计划书
2014/01/10 职场文书
关爱留守儿童倡议书
2014/04/15 职场文书
机关中层领导干部群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
zabbix自定义监控nginx状态实现过程
2021/11/01 Servers