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中的生成器和yield详细介绍
Jan 09 Python
Django中模型Model添加JSON类型字段的方法
Jun 17 Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 Python
python在文本开头插入一行的实例
May 02 Python
Python 确定多项式拟合/回归的阶数实例
Dec 29 Python
对Python的多进程锁的使用方法详解
Feb 18 Python
Python增强赋值和共享引用注意事项小结
May 28 Python
PyTorch里面的torch.nn.Parameter()详解
Jan 03 Python
Python读取Excel数据并生成图表过程解析
Jun 18 Python
13个Pandas实用技巧,助你提高开发效率
Aug 19 Python
深入分析python 排序
Aug 24 Python
Python FuzzyWuzzy实现模糊匹配
Apr 28 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
CPU步进是什么意思?i3-9100F B0步进和U0步进区别知识科普
2020/03/17 数码科技
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
2011/12/19 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
php两种无限分类方法实例
2015/04/21 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
2018/08/17 PHP
IE8的JavaScript点击事件(onclick)不兼容的解决方法
2013/11/22 Javascript
JavaScript实现梯形乘法表的方法
2015/04/25 Javascript
Jquery中$.post和$.ajax的用法小结
2015/04/28 Javascript
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
javascript跑马灯抽奖实例讲解
2020/04/17 Javascript
JS中实现函数return多个返回值的实例
2017/02/21 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
Vue下的国际化处理方法
2017/12/18 Javascript
实例详解Node.js 函数
2018/06/10 Javascript
JQuery Ajax执行跨域请求数据的解决方案
2018/12/10 jQuery
深入了解query和params的使用区别
2019/06/24 Javascript
jQuery实现放大镜案例
2020/10/19 jQuery
[02:39]DOTA2国际邀请赛助威团西雅图第一天
2013/08/08 DOTA
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
Python random模块用法解析及简单示例
2017/12/18 Python
Python2.7下安装Scrapy框架步骤教程
2017/12/22 Python
Centos部署django服务nginx+uwsgi的方法
2019/01/02 Python
Python3.6中Twisted模块安装的问题与解决
2019/04/15 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
2020/02/07 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
HTML5中input[type='date']自定义样式与日历校验功能的实现代码
2017/07/11 HTML / CSS
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
货代行业个人求职简历的自我评价
2013/10/22 职场文书
安卓程序员求职信
2014/02/28 职场文书
唐山大地震观后感
2015/06/05 职场文书
如何写一份成功的商业计划书
2019/06/25 职场文书
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang
使用python求解迷宫问题的三种实现方法
2022/03/17 Python