python类与对象基本语法
面向对象编程的2个非常重要的概念:类和对象。
对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念——类。
本人学习笔记基于python2的版本进行测试。
定义一个类
class person:
age=10
#下面sex没有进行初始化是会报错的
#sex
name="intsmaze"
def getPersonInfo(self):
print("age is %d;name is %s"%(self.age,self.name))
必须要进行tab缩进来区分类的成员,同时类的属性必须指定一个值,否则会报NameError: name '_person__age' is not defined错误。
创建类的对象
vi demo.py
class person:
age=10
name="intsmaze"
def getPersonInfo(self):
print("age is %d;name is %s"%(self.age,self.name))
def getSex(self):
print("sex is %s"%self.sex)
# 创建对象
ly=person()
# 调用对象的getPersonInfo方法
ly.getPersonInfo()
# 访问属性
print(ly.age)
# 添加属性
ly.sex="man"
ly.getSex()
python demo.py
age is 10;name is intsmaze
10
sex is man
创建对象的格式为:对象名 = 类名()。
这里的name和age都是公有
的,可以直接在类外通过对象名访问,如果想定义成私有
的,则需在前面加2个下划线 即'__',当然也可以在类创建对象后,向对象添加属性。
vi demo2.py
class person:
__age=10
__name="intsmaze"
def getPersonInfo(self):
print("age is %d;name is %s"%(self.__age,self.__name)) ly=person()
ly.getPersonInfo()
print(ly.__age)
python demo2.py
age is 10;name is intsmaze
Traceback (most recent call last):
File "class2.py", line 9, in <module>
print(ly.__age)
AttributeError: person instance has no attribute '__age'
私有属性是不能够在类外通过对象名来进行访问的。在Python中没有像C++中public和private这些关键字来区别公有属性和私有属性,它是以属性命名方式来区分,如果在属性名前面加了2个下划线'__',则表明该属性是私有属性,否则为公有属性(方法也是一样,方法名前面加了2个下划线的话表示该方法是私有的,否则为公有的)。
类的方法
在类中可以定义一些方法,定义方法采用def
关键字,在类中定义的方法至少会有一个参数,一般以名为self
的变量作为该参数(用其他名称也可以),而且需要作为第一个参数。
vi demo3.py
class person:
__age=18
def getPersonInfo(self):
print("age is %d"%self.__age)
def getPersonInfo2(self,age):
if(self.__age<age):
print("too old")
else:
self.__age=age
print("age is %d"%self.__age) ly=person()
ly.getPersonInfo()
ly.getPersonInfo2(20)
ly.getPersonInfo2(10)
python中没有重载的概念,即不能方法重载。
python demo3.py
age is 18
too old
age is 10
所谓的self,可以理解为自己。可以把它当做C++中类里面的this指针一样理解,就是对象自身的意思,在用某个对象调用该方法时,就将该对象作为第一个参数传递给self。
类的构造器
vi demo4.py
class person:
__name="intsmaze"
def __init__(self):
self.__age=20
self.__name="liuyang"
def getPersonInfo(self):
print("age is %d;name is %s"%(self.__age,self.__name)) ly=person()
ly.getPersonInfo()
python demo4.py
age is 20;name is liuyang
对象在默认调用__init__()
方法的时候传递一些参数
vi demo5.py
class person:
__name="intsmaze"
#def __init__(self):
# self.__age=20
# self.__name="liuyang"
def __init__(self, age, name):
self.__age = age
self.__name = name
def getPersonInfo(self):
print("age is %d;name is %s"%(self.__age,self.__name))
#ly=person()
#ly.getPersonInfo()
ly=person(100,"hello")
ly.getPersonInfo()
python demo5.py
age is 100;name is hello
构造器也不能重载,如果把上面的注释去掉,调用脚本将会报错。构造器方法,在创建一个对象时默认被调用,不需要手动调用。
析构
创建对象时,默认调用构造方法
;当删除一个对象时,同样也会默认调用一个方法,这个方法为析构方法
。
vi dem6.py
# 创建对象
#encoding=utf-8
class Animal():
# 构造方法
def __init__(self):
print '---构造方法被调用---'
# 析构方法
def __del__(self):
print '---析构方法被调用---'
# 创建对象
dog = Animal()
# 删除对象
del dog
python dem6.py
---构造方法被调用---
---析构方法被调用---
打印对象
class person:
__name="intsmaze"
def __str__(self):
return "my name is "+self.__name
ly=person()
print(ly)
如果不重写__str__方法,则print(ly)将打印该对象的内存地址。
原文和作者一起讨论:http://www.cnblogs.com/intsmaze/p/6690314.html
微信:intsmaze
python类与对象基本语法的更多相关文章
- 一文讲全了Python 类和对象内容
摘要:这是一个关于 Python 类和对象的全部内容. 本文分享自华为云社区<从零开始学python | Python 类和对象-面向对象编程>,原文作者:Yuchuan . Pytho ...
- python类、对象
python类.对象 学习完本篇,你将会深入掌握 什么是类,对象 了解类和对象之间的关系 能独立创建一个People(人类),属性有姓名.性别.年龄.提供一个有参的构造方法,编写一个show方法,输出 ...
- python类与对象各个算数运算魔法方法总结
1.python类与对象各个算术运算魔法方法总结: 2.各个魔法方法应用举例: 3.实例训练: (1)我们都知道在 Python 中,两个字符串相加会自动拼接字符串,但遗憾的是两个字符串相减却抛出异常 ...
- python 类和对象的属性
python类和对象的属性分为类属性和对象属性两大类,类属性属于类,而对象属性属于对象. 1. 父类的对象属性会被子类的对象继承. 2. 父类的类属性会被子类继承,还是作为类属性,如果父类改变了类属性 ...
- Python类和对象
目录 类与对象 其他方法 继承 经典类和新式类 派生 组合 接口.归一化设计与抽象类 继承实现的原理 子类中调用父类的方法 指名道姓 super()方法 多态与多态性 封装 单下划线开头 双下划线开头 ...
- python 类,对象
声明类 ''' class 类名: '类的文档字符串' 类体 ''' #我们创建一个类 class Data: pass 声明类 class Person: #定义一个人类 role = 'perso ...
- Python 类和对象-上
#类和对象 class Human: #属性 -> 成员属性(变量) ear = 2 mouth = 1 sex = 'man' age = 28 name = 'zhangwang' marr ...
- python 类和对象上
面向对象 Object Oriented 面向对象的学习: 面向对象的语法(简单,记忆就可以搞定) 面向对象的思想(稍难,需要一定的理解) 面向过程和面向对象的区别 面向过程开发,以函数作为基本结构使 ...
- Python 简明教程 --- 19,Python 类与对象
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 那些能用计算机迅速解决的问题,就别用手做了. -- Tom Duff 目录 上一节 我们介绍了Pyt ...
随机推荐
- Dijkstra算法——单源最短路径问题
学习一个点到其余各个顶点的最短路径--单源最短路径 Dijkstra算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向 ...
- 【转】Spring源码编译
原文地址: http://www.flyoung.me/2013/08/02/springcodecompile/ 参考资料: https://github.com/spring-projects/s ...
- 每天一个linux命令(46)--rcp命令
rcp代表“remote file copy”(远程文件拷贝).该命令用于在计算机之间拷贝文件.rcp命令有两种格式.第一种格式用于文件到文件的拷贝,第二种格式用于文件或目录拷贝到另一个目录中. 1. ...
- everything 快速搜索有代价
我在一台电脑上运行过everything后,把它拷贝到另一台电脑上运行,前一台电脑上的搜索结果记录居然还,包括文件类型,标题,大小,位置.天呐··· 虽然看不到内容,但对于一个社工来说,一个标题完全足 ...
- 程序点滴001_Python模拟点阵数字
尝试过很多编程语言,写过不少程序(当然,基本上都是些自娱自乐或给自己用的工具类的小玩意儿),逐渐认识到编写程序是一个不断完善.不断优化的过程——编程首先要有一个想法(目标),围绕这个目标形成最基本的功 ...
- msil_accessibility_b03f5f7f11d50a3a_6.1.7600.16385_none_2232298e4f48d6ba
dll名称 + +windows版本号 +补丁编号
- 基于 socket.io, 简单实现多平台类似你猜我画 socket 数据传输
一.前言 socket.io 实现了实时双向的基于事件的通讯机制,是基于 webSocket 的封装,但它不仅仅包括 webSocket,还对轮询(Polling)机制以及其它的实时通信方式封装成了通 ...
- smarty fetch方法
fetch 取得输出的内容 返回一个模板输出的内容(HTML代码),而不是直接显示出来,需要指定一个合法的模 板资源的类型和路径.你还可以通过 第二个可选参数指定一个缓存号,相关的信息可以查看缓存 ...
- sed 删除换行符
sed 删除换行符 sed ':label;N;s/\n/:/;b label' filename sed ':label;N;s/\n/:/;t label' filename 上面的两条命令可以实 ...
- markown编辑器截图粘贴预览,并将图片传至七牛云
最近在做一个项目,需要实现类似QQ截图后,就是能够在富文本编辑器中粘贴截图并预览. 先看一下效果: 分析一下实现步骤: QQ截图后在编辑器中粘贴,肯定会有一个粘贴事件,即 paste 事件 在事件回调 ...