面向对象编程的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. JS完成页面跳转并传参的方法|附加:循环遍历对象

    此方法只能传递较少参数 方法如下: <a href='page/index.html'>跳转</a> 以上是正常写法,如果要传参按一下写法: <!--参数写在?后面,多个 ...

  2. C++ 11 学习2:空指针(nullptr) 和 基于范围的for循环(Range-based for loops)

    3.空指针(nullptr) 早在 1972 年,C语言诞生的初期,常数0带有常数及空指针的双重身分. C 使用 preprocessor macroNULL 表示空指针, 让 NULL 及 0 分别 ...

  3. Java面试08|Java重要的类和相关的方法

    1.深入理解Class类及其中的方法 获取Class类的方法: 1.调用Object类的getClass()方法来得到Class对象,这也是最常见的产生Class对象的方法.2.使用Class类的中静 ...

  4. 3389: [Usaco2004 Dec]Cleaning Shifts安排值班

    3389: [Usaco2004 Dec]Cleaning Shifts安排值班 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 102  Solved: ...

  5. 有关ospf抓包

    有关ospf抓包 1.相关的路由器为这样子的: 路由器都运行了ospf: 抓包的链路为GE0/0/2 , 2.抓包图: 从图上我们可以看到,protocol info 这一栏里面出现了: hello ...

  6. vector 对象中存放指针类型数据

    <<C++ Primer>> 第四版Exercise Section 5.6 的5.1.6 有一道题是这样的:编写程序定义一个vector对象,其每个元素都是指向string类 ...

  7. 多种语言开发Spark-以WordCount为例

    Spark是目前最火爆的大数据计算框架,有赶超Hadoop MapReduce的趋势.因此,趁着现在还有大多数人不懂得Spark开发的,赶紧好好学习吧,为了使不同的开发人员能够很好的利用Spark,S ...

  8. Jaro-Winkler Distance

    发现commons-lang 中有实现: StringUtils.class public static double getJaroWinklerDistance(final CharSequenc ...

  9. netflix zuul 学习

    netflix zuul 是netflix开发的一个EDGE SERVICE. 主要是作为一个API Gateway 服务器,可以实现安全,流量控制等功能. 我看的是1.x的版本,Zuul1.x的实现 ...

  10. [LeetCode] Range Sum Query - Mutable 题解

    题目 题目 思路 一看就是单点更新和区间求和,故用线段树做. 一开始没搞清楚,题目给定的i是从0开始还是从1开始,还以为是从1开始,导致后面把下标都改掉了,还有用区间更新的代码去实现单点更新,虽然两者 ...