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写入数据到MP3文件中的方法
Jul 10 Python
Python 错误和异常代码详解
Jan 29 Python
python3处理含有中文的url方法
May 10 Python
深入浅析python 协程与go协程的区别
May 09 Python
关于python3中setup.py小概念解析
Aug 22 Python
python3获取url文件大小示例代码
Sep 18 Python
python中return的返回和执行实例
Dec 24 Python
python实现微信打飞机游戏
Mar 24 Python
python tkinter的消息框模块(messagebox,simpledialog)
Nov 07 Python
python 实现百度网盘非会员上传超过500个文件的方法
Jan 07 Python
pytorch DataLoader的num_workers参数与设置大小详解
May 28 Python
PyQt5实现多张图片显示并滚动
Jun 11 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
WHOIS类的修改版
2006/10/09 PHP
关于尾递归的使用详解
2013/05/02 PHP
php输入流php://input使用示例(php发送图片流到服务器)
2013/12/25 PHP
php强制下载文件函数
2016/08/24 PHP
redis+php实现微博(三)微博列表功能详解
2019/09/23 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
2019/10/22 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
2007/04/20 Javascript
利用jq让你的div居中的好方法分享
2013/11/21 Javascript
超链接的禁用属性Disabled使用示例
2014/07/31 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
一些实用性较高的js方法
2016/04/19 Javascript
微信小程序 同步请求授权的详解
2017/08/04 Javascript
JS倒计时实例_天时分秒
2017/08/22 Javascript
微信小程序之蓝牙的链接
2017/09/26 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
python获得图片base64编码示例
2014/01/16 Python
Python将xml和xsl转换为html的方法
2015/03/10 Python
安装dbus-python的简要教程
2015/05/05 Python
浅析Python中的多条件排序实现
2016/06/07 Python
python3使用腾讯企业邮箱发送邮件的实例
2019/06/28 Python
python之语音识别speech模块
2020/09/09 Python
美国高端牛仔品牌:Silver Jeans
2019/12/12 全球购物
奶茶专卖店创业计划书
2014/01/18 职场文书
幼儿园中秋节活动方案
2014/02/06 职场文书
职业生涯规划书结束语
2014/04/15 职场文书
《菜园里》教学反思
2014/04/17 职场文书
数字化校园建设方案
2014/05/03 职场文书
文明美德伴我成长演讲稿
2014/05/12 职场文书
2015年端午节活动总结
2015/02/11 职场文书
党内外群众意见范文
2015/06/02 职场文书
幼儿园开学温馨提示
2015/07/15 职场文书
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
2021/04/06 Python
Vue.Draggable实现交换位置
2022/04/07 Vue.js