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网络编程实例简析
Sep 26 Python
Python素数检测的方法
May 11 Python
Python实现批量转换文件编码的方法
Jul 28 Python
Python AES加密模块用法分析
May 22 Python
从django的中间件直接返回请求的方法
May 30 Python
python 梯度法求解函数极值的实例
Jul 10 Python
Django 开发调试工具 Django-debug-toolbar使用详解
Jul 23 Python
python多任务之协程的使用详解
Aug 26 Python
python之列表推导式的用法
Nov 29 Python
python基于exchange函数发送邮件过程详解
Nov 06 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
Feb 20 Python
Python 语言实现六大查找算法
Jun 30 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中函数rand和mt_rand的区别比较
2012/12/26 PHP
php中定时计划任务的实现原理
2013/01/08 PHP
获取URL文件名后缀
2013/10/24 PHP
PHP图片上传代码
2013/11/04 PHP
PHP数组操作类实例
2015/07/11 PHP
ThinkPHP中order()使用方法详解
2016/04/19 PHP
学习PHP Cookie处理函数
2016/08/09 PHP
iis 7下安装laravel 5.4环境的方法教程
2017/06/14 PHP
Eclipse去除js(JavaScript)验证错误
2014/02/11 Javascript
jquery实现简单的表单验证
2015/11/17 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
js获取Html元素的实际宽度高度的方法
2016/05/19 Javascript
js实现获取两个日期之间所有日期的方法
2016/06/17 Javascript
js实现自动轮换选项卡
2017/01/13 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
2017/01/21 Javascript
canvas实现钟表效果
2017/02/13 Javascript
详解elementui之el-image-viewer(图片查看器)
2019/08/30 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
详解python单例模式与metaclass
2016/01/15 Python
python jenkins 打包构建代码的示例代码
2019/11/29 Python
Python3的socket使用方法详解
2020/02/18 Python
python 负数取模运算实例
2020/06/03 Python
python3.7.3版本和django2.2.3版本是否可以兼容
2020/09/01 Python
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
2013/01/09 HTML / CSS
阿玛尼化妆品美国官网:Giorgio Armani Beauty
2017/02/02 全球购物
财政局长自荐信范文
2013/12/22 职场文书
开工仪式主持词
2014/03/20 职场文书
父亲节活动策划方案
2014/08/24 职场文书
校庆团日活动总结
2014/08/28 职场文书
二年级上册数学教学计划
2015/01/20 职场文书
护理专业自荐信范文
2015/03/06 职场文书
2015年高校图书馆工作总结
2015/04/30 职场文书
董事会决议范本
2015/07/01 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
廉洁自律承诺书2016
2016/03/25 职场文书
mysql分表之后如何平滑上线详解
2021/11/01 MySQL