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 sys.path详细介绍
Oct 17 Python
python中list循环语句用法实例
Nov 10 Python
python微信跳一跳游戏辅助代码解析
Jan 29 Python
Python操作Sql Server 2008数据库的方法详解
May 17 Python
python 基本数据类型占用内存空间大小的实例
Jun 12 Python
Python-Seaborn热图绘制的实现方法
Jul 15 Python
Python高级特性 切片 迭代解析
Aug 23 Python
Python Django中间件,中间件函数,全局异常处理操作示例
Nov 08 Python
原来我一直安装 Python 库的姿势都不对呀
Nov 11 Python
六种酷炫Python运行进度条效果的实现代码
Jul 17 Python
Python SMTP发送电子邮件的示例
Sep 23 Python
Python机器学习之底层实现KNN
Jun 20 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
多重?l件?合查?(一)
2006/10/09 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
2013/11/12 PHP
PHP中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
PHP strtotime函数用法、实现原理和源码分析
2015/02/04 PHP
PHP识别二维码的方法(php-zbarcode安装与使用)
2016/07/07 PHP
php 开发中加密的几种方法总结
2017/03/22 PHP
老生常谈PHP数组函数array_merge(必看篇)
2017/05/25 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
ExtJs 表单提交登陆实现代码
2010/08/19 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
ECMAScript 6即将带给我们新的数组操作方法前瞻
2015/01/06 Javascript
使用console进行性能测试
2015/04/27 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
jQuery常用的一些技巧汇总
2016/03/26 Javascript
Jquery获取第一个子元素简单实例
2016/06/02 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
判断横屏竖屏(三种)
2017/02/13 Javascript
Mongoose实现虚拟字段查询的方法详解
2017/08/15 Javascript
NodeJs 文件系统操作模块fs使用方法详解
2018/11/26 NodeJs
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
多版本Python共存的配置方法
2017/05/22 Python
python解决字符串倒序输出的问题
2018/06/25 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
python区块及区块链的开发详解
2019/07/03 Python
Python3enumrate和range对比及示例详解
2019/07/13 Python
聊聊python中的循环遍历
2020/09/07 Python
如何一键升级Python所有包
2020/11/05 Python
求职信名称怎么写
2014/05/26 职场文书
护士自荐信怎么写
2015/03/06 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书
上课迟到检讨书范文
2015/05/06 职场文书
又涨知识了,自律到底多重要?
2019/06/27 职场文书
女性励志书籍推荐
2019/08/19 职场文书
详解Nginx 被动检查服务器的存活状态
2021/10/16 Servers
使用Ajax实现进度条的绘制
2022/04/07 Javascript
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android