博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python学习笔记——面向对象基础
阅读量:4349 次
发布时间:2019-06-07

本文共 1888 字,大约阅读时间需要 6 分钟。

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 = 84 >>> bart.age5 86 >>> lisa.age7 Traceback (most recent call last):8   File "
", line 1, in
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 = name5         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 33 >>> '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 True10 >>> getattr(obj, 'y') # 获取属性'y'11 1912 >>> obj.y # 获取属性'y'13 19

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

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

 

转载于:https://www.cnblogs.com/airzsblog/p/5798472.html

你可能感兴趣的文章
物联网架构成长之路(8)-EMQ-Hook了解、连接Kafka发送消息
查看>>
2018-2019-1 20165234 20165236 实验二 固件程序设计
查看>>
IDEA的GUI连接数据库写入SQL语句的问题总结
查看>>
Xpath在选择器中正确,在代码中返回的是空列表问题
查看>>
leecode第一百九十八题(打家劫舍)
查看>>
【BZOJ 1233】 [Usaco2009Open]干草堆tower (单调队列优化DP)
查看>>
07-3. 数素数 (20)
查看>>
写一个欢迎页node统计接口Py脚本(邮件,附件)-py
查看>>
计算两个日期之间的天数
查看>>
山东省第六届蓝桥杯 ///标题:三羊献瑞//c/c++组
查看>>
Unity火炬之光进度
查看>>
Android关于buildToolVersion与CompileSdkVersion的区别
查看>>
袋鼠云日志,日志分析没那么容易
查看>>
缓存穿透 缓存雪崩 缓存并发
查看>>
MySQL表的操作
查看>>
pt-table-checksum解读【转】
查看>>
matlab中类的定义和使用
查看>>
NIO(2):Channel
查看>>
Consistent Hashing算法
查看>>
C++基础--完善Socket C/S ,实现客户端,服务器端断开重连
查看>>