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 BeautifulSoup使用方法详解
Nov 21 Python
使用Python编写简单网络爬虫抓取视频下载资源
Nov 04 Python
python 数据的清理行为实例详解
Jul 12 Python
Python基于identicon库创建类似Github上用的头像功能
Sep 25 Python
Python实现带参数与不带参数的多重继承示例
Jan 30 Python
python print 按逗号或空格分隔的方法
May 02 Python
pyqt5移动鼠标显示坐标的方法
Jun 21 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
Jun 24 Python
利用python实现.dcm格式图像转为.jpg格式
Jan 13 Python
Python enumerate内置库用法解析
Feb 24 Python
pycharm进入时每次都是insert模式的解决方式
Feb 05 Python
使用python如何删除同一文件夹下相似的图片
May 07 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
php空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
PHP封装的PDO数据库操作类实例
2017/06/21 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
避免 showModalDialog 弹出新窗体的原因分析
2010/05/31 Javascript
jquery实现居中弹出层代码
2010/08/25 Javascript
functional继承模式 摘自javascript:the good parts
2011/06/20 Javascript
关于JavaScript与HTML的交互事件
2013/04/12 Javascript
JavaScript 数组详解
2013/10/10 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
2015/11/17 Javascript
JQuery移动页面开发之屏幕方向改变与滚屏的实现
2015/12/03 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
jquery实现企业定位式导航效果
2018/01/01 jQuery
vue2.0 better-scroll 实现移动端滑动的示例代码
2018/01/25 Javascript
浅析Vue实例以及生命周期
2018/08/14 Javascript
vue 更改连接后台的api示例
2019/11/11 Javascript
Python升级提示Tkinter模块找不到的解决方法
2014/08/22 Python
python中WSGI是什么,Python应用WSGI详解
2017/11/24 Python
如何利用python生成MD5并去重
2020/12/07 Python
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
浅谈HTML5 FileReader分布读取文件以及其方法简介
2017/11/09 HTML / CSS
REN Clean Skincare官网:英国本土有机护肤品牌
2019/02/23 全球购物
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
Linux如何为某个操作添加别名
2013/03/01 面试题
文明倡议书范文
2014/04/15 职场文书
小学二年级学生评语
2014/04/21 职场文书
运动会方阵口号
2014/06/07 职场文书
校运动会广播稿300字
2014/10/07 职场文书
委托证明范本
2014/11/25 职场文书
自主招生推荐信格式模板
2015/03/24 职场文书
redis requires ruby version2.2.2的解决方案
2021/07/15 Redis
Python利用FlashText算法实现替换字符串
2022/03/31 Python
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
2022/06/10 Servers