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 相关文章推荐
Django发送html邮件的方法
May 26 Python
Python的pycurl包用法简介
Nov 13 Python
Python调用SQLPlus来操作和解析Oracle数据库的方法
Apr 09 Python
PyQt5打开文件对话框QFileDialog实例代码
Feb 07 Python
python多进程提取处理大量文本的关键词方法
Jun 05 Python
Python 给某个文件名添加时间戳的方法
Oct 16 Python
Python中xml和json格式相互转换操作示例
Dec 05 Python
对python PLT中的image和skimage处理图片方法详解
Jan 10 Python
python如何实现视频转代码视频
Jun 17 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
Oct 11 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
Jan 02 Python
教你怎么用python实现字符串转日期
May 24 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连接MySQL数据的操作要点
2015/03/20 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
javascript学习笔记(八) js内置对象
2012/06/19 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
JS中常用的输出方式(五种)
2016/06/12 Javascript
新入门node.js必须要知道的概念(必看篇)
2016/08/10 Javascript
jquery实现百叶窗效果
2017/01/12 Javascript
JavaScript基于DOM操作实现简单的数学运算功能示例
2017/01/16 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
2017/03/14 Javascript
JS中关于正则的巧妙操作
2017/08/31 Javascript
jQuery实现判断上传图片类型和大小的方法示例
2018/04/11 jQuery
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
vue实现点击选中,其他的不选中方法
2018/09/05 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
以一段代码为实例快速入门Python2.7
2015/03/31 Python
浅析Python基础-流程控制
2016/03/18 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
Django中cookie的基本使用方法示例
2018/02/03 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
对numpy中shape的深入理解
2018/06/15 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
2020/02/03 Python
python计算波峰波谷值的方法(极值点)
2020/02/18 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
用HTML5制作一个简单的弹力球游戏
2015/05/12 HTML / CSS
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
竞争性谈判邀请书
2014/02/06 职场文书
12月红领巾广播稿
2014/02/13 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
老公给老婆的检讨书(精华篇)
2014/10/18 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书
对讲机知识
2022/04/07 无线电