面向对象编程的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类与对象基本语法的更多相关文章

  1. 一文讲全了Python 类和对象内容

    摘要:这是一个关于 Python 类和对象的全部内容. 本文分享自华为云社区<从零开始学python | Python 类和对象-面向对象编程>,原文作者:Yuchuan  . Pytho ...

  2. python类、对象

    python类.对象 学习完本篇,你将会深入掌握 什么是类,对象 了解类和对象之间的关系 能独立创建一个People(人类),属性有姓名.性别.年龄.提供一个有参的构造方法,编写一个show方法,输出 ...

  3. python类与对象各个算数运算魔法方法总结

    1.python类与对象各个算术运算魔法方法总结: 2.各个魔法方法应用举例: 3.实例训练: (1)我们都知道在 Python 中,两个字符串相加会自动拼接字符串,但遗憾的是两个字符串相减却抛出异常 ...

  4. python 类和对象的属性

    python类和对象的属性分为类属性和对象属性两大类,类属性属于类,而对象属性属于对象. 1. 父类的对象属性会被子类的对象继承. 2. 父类的类属性会被子类继承,还是作为类属性,如果父类改变了类属性 ...

  5. Python类和对象

    目录 类与对象 其他方法 继承 经典类和新式类 派生 组合 接口.归一化设计与抽象类 继承实现的原理 子类中调用父类的方法 指名道姓 super()方法 多态与多态性 封装 单下划线开头 双下划线开头 ...

  6. python 类,对象

    声明类 ''' class 类名: '类的文档字符串' 类体 ''' #我们创建一个类 class Data: pass 声明类 class Person: #定义一个人类 role = 'perso ...

  7. Python 类和对象-上

    #类和对象 class Human: #属性 -> 成员属性(变量) ear = 2 mouth = 1 sex = 'man' age = 28 name = 'zhangwang' marr ...

  8. python 类和对象上

    面向对象 Object Oriented 面向对象的学习: 面向对象的语法(简单,记忆就可以搞定) 面向对象的思想(稍难,需要一定的理解) 面向过程和面向对象的区别 面向过程开发,以函数作为基本结构使 ...

  9. Python 简明教程 --- 19,Python 类与对象

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 那些能用计算机迅速解决的问题,就别用手做了. -- Tom Duff 目录 上一节 我们介绍了Pyt ...

随机推荐

  1. 2017-3-2 C#基础 结构体

    1. 结构体:用户自定义类型定义位置:定义在Main函数的外面,类的里面 定义格式:struct 自定义名字{ public 数据类型 名字; public 数据类型 名字; ... ...} 声明实 ...

  2. ForEach 循环

    在C 标签里面 有个foreach 标签,这个标签是专门来做循环的标签: <c:forEach items="${wekList}"  var="list" ...

  3. python打印表格式数据,留出正确的空格和段落星号或注释

    python打印表格式数据,留出正确的空格,格式化打出 代码如下: def printPicnic(itemsDict,leftWidth,rightWidth): print('PICNIC ITE ...

  4. 《学习记录》ng2-bootstrap中的component使用教程

    前序: 现在angular2已经除了集成的angular-cli,建议大家可以基于这个来快速开发ng2的项目,不用自己再搭建环境: 相关内容请前往:https://angular.cn/docs/ts ...

  5. C语言学习心得

    最近学习了C语言,打脑壳,很多东西不会用,没有概念,单点知识都懂,组合起来就不知道怎么弄了.慢慢来吧

  6. div 宽高相等2种实现方式

    div.wh{ background:#ff0;width:50%;position:relative;display:inline-block; } div.wh:before{ content: ...

  7. ajax 实现三级联动

    ajax 实现三级联动,相当于写了一个小插件,用的时候直接拿过来用就可以了,这里我用了数据库中的chinastates表, 数据库内容很多,三级联动里的地区名称都在里面,采用的是代号副代号的方式 比如 ...

  8. 1782: [Usaco2010 Feb]slowdown 慢慢游

    1782: [Usaco2010 Feb]slowdown 慢慢游 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 570  Solved: 346[Sub ...

  9. 1751: [Usaco2005 qua]Lake Counting

    1751: [Usaco2005 qua]Lake Counting Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 190  Solved: 150[Su ...

  10. MyBastis初次环境配置讲解

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .20 ...