python3.x 类和对象
python同样支持类和对象。在python3.x中没有了经典类,只有新式类,默认创建的就是新式类。具体的新式类与经典类的不同在python3.x中已经没有意义了。
类的定义和实例化
python定义简单类如下。
class Car(object):
pass c1=Car()
我们定义了一个Car类,其中什么方法也没有实现。c1是我们实例化的类Car,成为对象。
静态变量
我们可以在类中定义静态变量,静态变量属于类,既可以使用类访问,也可以使用对象访问。
class Car(object):
type='car' c1=Car()
print(c1.type)
print(Car.type)
运行结果是:
car
car
动态变量
动态变量属于类,在第一次创建类的时候传入类中。动态变量只属于对象,只能由对象访问。
class Car(object):
type='car' def __init__(self, name, colour):
self.name = name
self.colour = colour
print('我被创建了。') c1=Car('Lamborghini','yellow')
print(c1.type)
print(Car.type)
print('name:%s,colour:%s'%(c1.name,c1.colour))
运行结果是:
我被创建了。
car
car
name:Lamborghini,colour:yellow
类被创建的时候就会访问__init__()方法,上面的类__init__方法中请求了两个参数,所以创建的时候就必须要传入两个传输,其中self的意思是对象本身,以本例来说,当创建Car的实例c1时,self就是c1。
因为作用域的原因,传入的两个参数只能在__init__()中使用,如果想要在其它地方调用,就需要将值传给self。而这个参数就被称为动态参数。
动态方法
类的动态方法是自定义的方法,同时只有对象能够调用。
class Car(object):
type='car' def __init__(self, name, colour):
self.name = name
self.colour = colour
print('我被创建了。')
def show(self):
print("The car's name is %s and colour is %s." % (self.name, self.colour)) c1=Car('Lamborghini','yellow')
print(c1.type)
print(Car.type)
print('name:%s,colour:%s'%(c1.name,c1.colour))
c1.show()
运行结果是:
我被创建了。
car
car
name:Lamborghini,colour:yellow
The car's name is Lamborghini and colour is yellow.
show()就是类的动态方法。
静态方法
有动态方法必然会有静态方法。静态方法属于类,类和对象都可以进行调用。
class Car(object):
@staticmethod
def description():
print('This is a very fast car.') c1=Car()
c1.description()
Car.description()
静态方法的写法就是在动态方法前加入装饰器,并且不传入self参数。
类的属性
在方法前面加入@property装饰器,这个方法就变成了类的属性,可以以调用属性的方式进行方法的调用。
class Car(object):
def __init__(self, name, colour):
self.name = name
self.colour = colour
@property
def show(self):
print("The car's name is %s and colour is %s." % (self.name, self.colour)) c1=Car('Lamborghini','yellow')
c1.show
运行结果是:
The car's name is Lamborghini and colour is yellow.
可见,运行的时候不需要添加括号。
私有变量
在变量前面加入两个下划线就将这个变量变为了私有变量,创建的对象没有变法访问私有变量,私有变量只能内部访问。那么私有变量怎么显示呢?
class Car(object):
def __init__(self, name, colour):
self.__name = name
self.__colour = colour
def show(self):
print("The car's name is %s and colour is %s." % (self.__name, self.__colour)) c1=Car('Lamborghini','yellow')
c1.show()
运行结果是:
The car's name is Lamborghini and colour is yellow.
私有变量能在类内部定义方法进行读取。
利用类的特性也可以访问私有字段。
lass Car(object):
def __init__(self, name, colour):
self.__name = name
self.__colour = colour
def show(self):
print("The car's name is %s and colour is %s." % (self.__name, self.__colour))
@property
def name(self):
return self.__name c1=Car('Lamborghini','yellow')
c1.show()
print(c1.name)
运行结果是:
The car's name is Lamborghini and colour is yellow.
Lamborghini
通过设定和私有字段相似的名称的特性名称,从程序外部看来就好像是访问了私有字段一样,这种方法也是可以访问私有字段的。
私有方法
将方法前面加上两个下划线就会变成私有方法,外部就无法访问这个方法了。而如果要访问这个方法只能在类的内部才可以访问。
class Car(object):
def __init__(self, name, colour):
self.__name = name
self.__colour = colour
def __show(self):
print("The car's name is %s and colour is %s." % (self.__name, self.__colour))
def func(self):
self.__show() c1=Car('Lamborghini','yellow')
c1.func()
运行结果是:
The car's name is Lamborghini and colour is yellow.
私有方法也可以使用以下方法进行调用,但是并不建议这样使用。
class Car(object):
def __init__(self, name, colour):
self.__name = name
self.__colour = colour
def __show(self):
print("The car's name is %s and colour is %s." % (self.__name, self.__colour))
def func(self):
self.__show() c1=Car('Lamborghini','yellow')
c1._Car__show()
运行结果是:
The car's name is Lamborghini and colour is yellow.
私有变量更改
如果我们必须更改私有变量呢?其实也是有办法的,可以使用以下的方法。
class Car(object):
def __init__(self, name, colour):
self.__name = name
self.__colour = colour
def show(self):
print("The car's name is %s and colour is %s." % (self.__name, self.__colour))
@property
def func(self):
return self.__name
@func.setter
def func(self,value):
self.__name=value c1=Car('Lamborghini','yellow')
c1.show()
c1.func='car'
c1.show()
运行结果是:
The car's name is Lamborghini and colour is yellow.
The car's name is car and colour is yellow.
这样就实现了私有变量的更改的操作
析构函数
__init__()在对象被创建的时候进行调用,成为构造函数。而对象被销毁的时候就会调用__del__()函数,成为析构函数。
class Car(object):
def __init__(self):
print('我被创建了')
def __del__(self):
print('我要被销毁了') c1=Car()
运行结果是:
我被创建了
我要被销毁了
__call__方法
python中也有一个方法叫做__call__(),这个方法是干什么用的呢?当对象作为一个函数进行执行的时候,就会执行这个方法。
class Car(object):
def __call__(self, *args, **kwargs):
print('call') c1=Car()
c1()
运行结果是:
call
可以看到使用这个方法之后,对象就能添加括号直接进行执行了。
python3.x 类和对象的更多相关文章
- (08)-Python3之--类和对象
1.定义 类:类是抽象的,一类事物的共性的体现. 有共性的属性和行为. 对象:具体化,实例化.有具体的属性值,有具体做的行为. 一个类 对应N多个对象. 类包含属性以及方法. class 类名: 属 ...
- python3 类、对象的基础概念
类:具有相同特性和方法的抽象概念称为类 对象:从类中具体描述的一个事物称为对象 类和对象的关系:类是对象的抽象概念,对象是类的具体实例 class test001: #创建类 def __init__ ...
- day24:面向对象设计与面向对象编程、类和对象
一.三大编程范式: 面向过程: 面向函数: 面向对象: 二.程序的进化论: 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比方说,你定 ...
- python的类和对象——进阶篇
写在前面的话 终于,又到了周五.当小伙伴们都不再加班欢欢喜喜过周末的时候,我刚刚写完这一周的游戏作业,从面对晚归的紧皱眉头到现在的从容淡定,好像只有那么几周的时间.突然发现:改变——原来这么简单.很多 ...
- python 面向对象之封装与类与对象
封装 一,引子 从封装本身的意思去理解,封装就好像是拿来一个麻袋,把小猫,小狗,小王八,小老虎一起装进麻袋,然后把麻袋封上口子.照这种逻辑看,封装='隐藏',这种理解是相当片面的 二,先看如何隐藏 在 ...
- python 类和对象
类和对象 类 1.类的组成 数据和函数,二者是类的属性 2.两个作用: 实例化 属性引用 属性引用:类名.属性(增删改查) 实例化: 类名加括号就是实例化,会自动出发__init__的运行 ...
- Python类和对象
目录 类与对象 其他方法 继承 经典类和新式类 派生 组合 接口.归一化设计与抽象类 继承实现的原理 子类中调用父类的方法 指名道姓 super()方法 多态与多态性 封装 单下划线开头 双下划线开头 ...
- Python深入类和对象
一. 鸭子类型和多态 1.什么是鸭子类型: 在程序设计中,鸭子类型(英语:Duck typing)是动态类型和某些静态语言的一种对象推断风格."鸭子类型"像多态一样工作,但是没有继 ...
- python的类和对象
一.面向对象和面向过程 1.1面向过程的特点 优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可. 缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身. 1.2面 ...
随机推荐
- 【Python】关于使用pycharm遇到只能使用unittest方式运行,无法直接选择Run
相信大家可能都遇到过这个问题,使用pycharm直接运行脚本的时候,只能选择unittest的方式,能愁死个人
- meta标签中的http-equiv属性使用介绍
meta是html语言head区的一个辅助性标签.也许你认为这些代码可有可无.其实如果你能够用好meta标签,会给你带来意想不到的效果,meta 标签的作用有:搜索引擎优化(SEO),定义页面使用 ...
- 自学数据库建模工具--powerdesigner
网上找了个英文的,版本感觉有点旧12的,但还好英语还行,摸索了一下功能,大概截了几张图,感觉优点:1总共有物理模型pdm,概念模型cdm,业务模型bdm 可以互转,逻辑清晰 2表与表之前的联系,建 ...
- day32 Python与金融量化分析(二)
第一部分:金融与量化投资 股票: 股票是股份公司发给出资人的一种凭证,股票的持有者就是股份公司的股东. 股票的面值与市值 面值表示票面金额 市值表示市场价值 上市/IPO: 企业通过证券交易所公开向社 ...
- CentOS 6.3从自带的Pyhon版本
本文介绍CentOS 6.3从自带的Pyhon版本是2.6升级到2.7.6的方法. 因为CentOS系统中旧版本的Python已被深度依赖,所以不能卸载原有的Python,只能全新安装. 1.下载Py ...
- 关于px em rem的一点小总结
2015-11-28 06:06:40 概念 都是CSS单位. px:像素 Pixel.像素 (计算机屏幕上的一个点) em:1em 等于当前的字体尺寸. 2em 等于当前字体尺寸的两倍. 例如,如果 ...
- win10 downloader.exe 修复方法
由于系统更新是和系统密切相关的,在日常使用中某些系统文件如果出现损坏,同样会导致系统更新无法成功安装.如果在使用Windows 10时可以成功下载更新,但是安装的时候出错,此时就需要对系统文件进行检查 ...
- 第5课:内置函数、处理json、常用模块
1. 内置函数 1)常用的内置函数 print(all([0, 2, 3, 4])) # False,判断可迭代的对象里面的值是否都为真 print(any([0, 1, 2, 3, 4])) # T ...
- Composer 扩展包安装方法
问题说明 我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自 这个文档 的: composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害. 因为 com ...
- c# winform捕获全局异常,并记录日志
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using ...