面向对象编程的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. 【java基础之jdk源码】集合类

    最近在整理JAVA 基础知识,从jdk源码入手,今天就jdk中 java.util包下集合类进行理解 先看图 从类图结构可以了解 java.util包下的2个大类: 1.Collecton:可以理解为 ...

  2. SQL Server-字字珠玑,一纸详文,完全理解SERIALIZABLE最高隔离级别(基础系列收尾篇)

    前言 对于上述锁其实是一个老生常谈的话题了,但是我们是否能够很明确的知道在什么情况下会存在上述各种锁类型呢,本节作为SQL Server系列末篇我们 来详细讲解下. Range-Lock 上述关于Ra ...

  3. ActiveMQ学习系列(四)----消息持久化到mysql

    前记:目前学习还比较杂乱,还未找到系统化地学习ActiveMq的方法.在网上看到消息持久化的demo,了解了一下,在此记录. 一.目前ActiveMq支持的持久化方法 url:http://activ ...

  4. Vmware虚拟机设置静态IP地址

    一.安装好虚拟后在菜单栏选择编辑→ 虚拟网络编辑器,打开虚拟网络编辑器对话框,选择Vmnet8 Net网络连接方式,随意设置子网IP,点击NAT设置页面,查看子网掩码和网关,后面修改静态IP会用到. ...

  5. inline元素的margin与padding

    替换元素与非替换元素 替换元素(replaced element):所谓替换元素就是浏览器根据元素的标签和属性,来决定元素具体显示什么内容.比如说:img标签的src属性的值用来读取图片信息并且显示出 ...

  6. Android 一个改善的okHttp封装库

    膜拜一下~ 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/49734867: 本文出自:[张鸿洋的博客] 一.概述 之前写了篇A ...

  7. 从 Spring 2.5 开始就可以使用注解来配置依赖注入,而不是采用 XML 来描述一个 bean。

    1.在 XML 注入之前进行注解注入,因此后者可以被前者重写. 2.在默认情况下注解在 Spring 容器中不打开,需要配置启动. <beans xmlns="http://www.s ...

  8. 你可记得曾经的-------- C#面向对象的“基础”

    1.C#中构造函数定义的理解:     ①构造函数名与所在的类名相同     ②构造函数可以重载     ③构造函数可以带参数     ④构造函数没有返回值,且不允许写出void,可以有参也可以无参 ...

  9. SQL Tuning 基础概述10 - 体会索引的常见执行计划

    在<SQL Tuning 基础概述05 - Oracle 索引类型及介绍>的1.5小节,提到了几种"索引的常见执行计划": INDEX FULL SCAN:索引的全扫描 ...

  10. 意外发现的大批量导入数据SqlBulkCopy类

    因为要做一个号码归属地查询小功能,因为要导入外部(文本文件)的电话归属地数据,使用的是SqlDataAdapter类,数据不多,只四万有多条,表也只有一个,phoneBook表,使用的是DataTab ...