1.类和实例

  1.1类的定义

  类的定义使用class关键字,其后紧跟类名(通常大写开头),紧接着是(object),object是该类继承的类名,没有就继承object类。

  实例化时就是类名+(),有参数需要传入参数。

class Student(object):
pass
bart = Student()

  类的属性定义在_init_方法中(相当于java的构造方法),该方法的第一个参数永远是self,在实例化时必须传入相应的参数(除self外)

class Student(object):

    def __init__(self, name, score):
self.name = name
self.score = score
bart = Student('Bart Simpson', 59)

  1.2方法的参数

  类方法的参数第一个必须是self,而且不用传入。其余的参数和普通函数无异,也可以使用默认参数,可变参数和关键字参数。

  1.3关于实例变量

  因为python是动态语言,允许对实例添加新的变量,所以一个类的两个实例变量个数和名称不一定相同。

 >>> bart = Student('Bart Simpson', 59)
>>> lisa = Student('Lisa Simpson', 87)
>>> bart.age = 8
>>> bart.age
8
>>> lisa.age
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Student' object has no attribute 'age'

2.访问限制

  在Python中,实例的变量名如果以__(双底杠)开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问。外部要获取或更改该变量值可以通过set,get方法,set方法内部还需要进行参数检查。此外双底杠开头双底杠结尾的变量是特殊变量,变量命名时不要用这种方式命名。

 class Student(object):

     def __init__(self, name, score):
self.__name = name
self.__score = score

3.继承与多态

  python的继承与多态和java类似,遵循“开闭原则”:对扩展开放,对修改封闭。但python支持多重继承,如果父类有相同的方法,调用时会从左到右搜索,其余部分后面专门会讲。

4.获取对象信息

  4.1 type函数:type(object),返回type类型

  4.2 isinstance函数:isinstance(实例,类名),返回布尔值

  4.3 dir函数:dir(object),返回一个包含该对象所有方法,属性的字符串list

  4.4 __xxx__的属性和方法在Python中都是有特殊用途的,例如__len__方法,下面两种用法等价:(个人认为一种是函数写法,一种是类方法写法)

 >>> len('ABC')
3
>>> 'ABC'.__len__()
3

  4.5 getattr()、setattr()以及hasattr()函数:可以直接操作一个对象的状态。如下所示:

 >>> hasattr(obj, 'x') # 有属性'x'吗?
True
>>> obj.x
9
>>> hasattr(obj, 'y') # 有属性'y'吗?
False
>>> setattr(obj, 'y', 19) # 设置一个属性'y'
>>> hasattr(obj, 'y') # 有属性'y'吗?
True
>>> getattr(obj, 'y') # 获取属性'y'
19
>>> obj.y # 获取属性'y'
19

  可以传入一个default参数,如果属性不存在,就返回默认值:

 >>> getattr(obj, 'z', 404) # 获取属性'z',如果不存在,返回默认值404
404

Python学习笔记——面向对象基础的更多相关文章

  1. Python学习笔记之基础篇(-)python介绍与安装

    Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...

  2. Python学习之面向对象基础

    python的面向对象和以前学的c++,Java都是一般,大同小异,面向对象基础先谈谈类的构造,编写,属性和方法的可见性等等 1.定义类,创建和使用对象 #定义类 class Student(obje ...

  3. Python学习笔记:基础

    本文根据廖雪峰的博客,学习整理笔记.主要内容有:基本数据类型,容器数据类型,变量及其作用域,判断及循环语法,函数式编程,面向对象,模块等概念. 数据类型 在python中,能够直接处理的数据类型有以下 ...

  4. python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)

    一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...

  5. python学习笔记----面向对象

    面向对象 类:成员变量(属性) 方法(操作成员变量) 出一个场景:玩过游戏.主人公,进入了一个场景,有10个小怪物是一样的.有攻击力,血(100格).如果小怪物有多个数值需要管理,小怪物的血量.小怪物 ...

  6. Python学习笔记day01--Python基础

    1 python的应用     Python崇尚优美.清晰.简单,是一个优秀并广泛使用的语言.     Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等 ...

  7. python学习笔记--面向对象的编程和类

    一.面向对象的编程 面向对象程序设计--Object Oriented Programming,简称oop,是一种程序设计思想.二.面向对象的特性类:class类,对比现实世界来说就是一个种类,一个模 ...

  8. Python 学习笔记(基础篇)

    背景:今年开始搞 Data science ,学了 python 小半年,但一直没时间整理整理.这篇文章很基础,就是根据廖雪峰的 python 教程 整理了一下基础知识,再加上自己的一些拓展,方便自己 ...

  9. Python学习笔记之基础篇(二)python入门

    一.pycharm 的下载与安装: 使用教程:https://www.cnblogs.com/jin-xin/articles/9811379.html 破解的方法:http://xianchang. ...

随机推荐

  1. [GIF] GIF Loop Coder - Animating with Arrays

    In this lesson, we discuss animating using arrays, and how different data types are interpolated whi ...

  2. [Javascript] The Array forEach method

    Most JavaScript developers are familiar with the for loop. One of the most common uses of the for lo ...

  3. 编写Qt Designer自定义控件(一)——如何创建并使用Qt自定义控件

    在使用Qt Designer设计窗体界面时,我们可以使用Widget Box里的窗体控件非常方便的绘制界面,比如拖进去一个按钮,一个文本编辑器等.虽然Qt Designer里的控件可以满足我们大部分的 ...

  4. Debian 6解决中文乱码

    DEBIAN下中文显示 一.首先检查LOCALE情况 说明:DEBIAN因为基于GNU所以,对不同地域进行了不同的包支持,以LOCALE形式存在. 1.挂载ISO文件包,前8个ISO包就可以(这里不在 ...

  5. JavaScript入门(7)

    一.什么是函数 函数:把完成特定功能的代码放到一个函数里,直接调用这个函数,就省去重复输入大量代码的麻烦 函数的作用:写一次代码,然后反复地重用这个代码 Eg: 求多组数的和,不使用函数 { var ...

  6. (转)Eclipse中junit框架的使用——单元测试

    [转]junit浅学笔记一 JUnit是一个回归测试框架(regression testing framework).Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How ...

  7. 深入理解C#中this/partial/null的使用

    一.this关键字作用 1.this表示当前运行中的对象 Eg: public class Person { public int age; public string name; public Pe ...

  8. Path类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  9. MVC小系列(八)【改变Areas的FindView顺序】

    MVC小系列(八)[改变Areas的FindView顺序] 一般项目比较大的话,会根据模块建立Areas,这样结构清晰,也有利于路由的部署, 1 Areas下有自己的_LayOut模板,而如果希望所有 ...

  10. ACM/ICPC ZOJ1009-Enigma 解题代码

    #include <iostream> #include <string> using namespace std; int main() { int strwide; cin ...