设为首页 加入收藏

TOP

Python学习笔记——面向对象基础
2017-09-30 17:45:36 】 浏览:4365
Tags:Python 学习 笔记 面向 对象 基础

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是动态语言,允许对实例添加新的变量,所以一个类的两个实例变量个数和名称不一定相同。

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

2.访问限制

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

1 class Student(object):
2 
3     def __init__(self, name, score):
4         self.__name = name
5         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__方法,下面两种用法等价:(个人认为一种是函数写法,一种是类方法写法)

1 >>> len('ABC')
2 3
3 >>> 'ABC'.__len__()
4 3

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

 1 >>> hasattr(obj, 'x') # 有属性'x'吗?
 2 True
 3 >>> obj.x
 4 9
 5 >>> hasattr(obj, 'y') # 有属性'y'吗?
 6 False
 7 >>> setattr(obj, 'y', 19) # 设置一个属性'y'
 8 >>> hasattr(obj, 'y') # 有属性'y'吗?
 9 True
10 >>> getattr(obj, 'y') # 获取属性'y'
11 19
12 >>> obj.y # 获取属性'y'
13 19

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

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

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇自动化运维:flask-bootstrap + h.. 下一篇CentOS下离线安装Flask及Flask-So..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目