视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
python中的对象
2020-11-27 14:26:57 责编:小采
文档


对象:程序中使用的所有值都是对象,对象由内部属性和方法组成 这些方法会执行与数据相关的各种操作,前面操作列表类型数据时 我们已经用过了方法:

data = [37,34]; 
data.insert(1,25); 
data.append(23) 
print(data);

输出结果:
37,25,34,23

dir()函数 可以列出对象上可用的方法 是进行交互式体验的工具

dir(data)

输出结果:
['__add__', '__class__', '__contains__', ......'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

在使用dir()函数查看对象的方法时 会发现有很多以下划线开始和结束的特殊的方法 这些方法用于实现各种运算方式;
例如:

data = data +[3,4,50]; 
print(data);

python中的+运算符 实际上是执行了如下操作:

data.__add__([3,4,5])

注:两个对象是否能进行加法运算 首先要看相应的对象是否存在__add__()方法 ,如果有 即使这个对象从数学上不可加 我们都可以用加法的形式来表达其所定义的操作,因此可以得出结论:python中 类似于__add__这样的魔术方法 一般定义了其不同的行为 __add__相对应的行为 就是 +运算或者连接
在面向对象编程中 class objName class:定义对象的类 objName:类名

class Stack(object): 
 def __init__(self): #__init__ 构造器,当一个实例被创建的时候 调用的初始化方法 
 self.stack = []; 
 def push(self,object): 
 self.stack.append(object); 
 def pop(self): 
 return self.stack.pop(); 
 def length(self): 
 return len(self.stack);

在定义Stack类时 语法 class Stack(object) 将Stack声明为一个object 圆括号是python指定继承的方式 因此 Stack类继承自object object是所有python类型中的根类型
类中使用def语法 定义了方法 每个方法中的第一个参数 self 始终都指向对象自身
self变量:涉及对象的所有操作 必须引用self变量
如何使用Stack呢?

s = Stack(); 
s.push("Dave"); 
s.push([3,4,5,6]); 
s.push(32); 
x = s.pop();

输出结果
32

y = s.pop();

输出结果:
[3, 4, 5, 6]
append()方法:该方法 在python中的列表一章节中有过介绍,用于在列表的末尾追加一个元素
pop()方法:用于从列表末尾删除一个元素 并返回该元素
len() 函数 :返回列表中元素的个数
Stack类实际上是创建了一个全新的对象用于实现栈 但是 该栈与内置的列表对象几乎完全相同 因此我们可以直接继承list 然后添加额外的方法即可

class Stack(list): 
 def push(self,object): 
 self.append(object);

当继承列表对象时,列表对象的方法Stack对象可直接进行使用

s = Stack(); 
s.push(66); 
s.push(65); 
s.push(); 
s.push(63);

输出结果:
[66, 65, , 63]

s.reverse();#此方法 用于反转列表中元素的顺序

输出结果:
[63, , 65, 66]
在类中如何创建静态方法?
通常 类中定义的所有方法 只使用与该类的实例(创建的对象) 但是 也可以定义静态方法(可以像函数一样调用)

class MyObject(object): 
 @staticmethod 
 def myCheck(): 
 return 'ok'; 
result = MyObject.myCheck(); 
print(result);

输出结果:
ok
@staticmethod 是一个装饰器(decorator)实际上就是一个函数 当我们在执行myCheck函数之前装饰器的staticmethod 函数先执行将myCheck方法定义为了静态方法
总结:
1,dir()方法:可查看对象所有的方法
2,魔术方法:以双下划线开始结束的方法 该类方法定义了不同的行为如:__add__()方法 定义了+运算
3,python中定义类的方法以及如何继承对象 如: class MyObject(object)

4,@staticmethod: 装饰器的使用 :将一个方法定义为静态方法

下载本文
显示全文
专题