面向对象/什么是对象

一、面向对象的基本概念

1.python中的所有事物都是以对象形式存在,从简单的数值类型,到复杂的代码模块,都是对象。

1.1对象(object)既表示客观世界问题空间的某个具体事物,又表示软件系统解空间中的基本元素
1.2对象=属性+方法
对象以id作为标识,既包含数据(属性),也包含代码(方法),是某一类具体事物的特殊实例如下图所示:

>>> id(1) #1也是一个对象id(1)就是查看这个对象保存在内存当中的地址
8791351878480
>>> type(1)#查看对象的类型
#返回结果表示1这个对象为一个整数类型
>>> dir(1)#查看对象属性和方法
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']


>>> id('a')#以字符串作为对象查看它保存在内存中的地址
30578592
>>> type('a')#查看对象类型
#返回结果表示'a'为字符串类型
>>> dir('a')#查看对象的属性和方法
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']


>>> abs(-1)#abs是一个求绝对值的内置函数如何调用它就能求的一个数据的绝对值,函数也可以作为一个对象
1
>>> id(abs)#查看对象保存在内存中的地址
3477080
>>> type(abs)#查看对象类型

>>> dir(abs)#查看对象的属性和方法
['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__text_signature__']
>>> 
2.创建对象

2.1、对象是类的实例即拥有自己的属性和独立数据的实例,是程序的基本单元
要创建一个新的对象,首先必须定义一个类,用以指明该类型的对象所包含的内容(属性和方法),同一类(class)的对象具有相同的属性和方法,但属性值和id不同
2.2、对象的名称:赋值语句给予对象以名称,对象可以有多个名称(变量引用),但只有一个id例如:

a = complex(1,2)
c=b=a
#a、b、c三个变量的值都指向complex(1,2)复数对象,但是该对象的id只有一个

2.3、对象实现了属性和方法的封装,是一种数据抽象机制,提高了软件的重要性、灵活性、扩展性。

3.对象属性和方法的引用

3.1、引用形式:<对象名>.<属性名>如果是一个单个的属性就可以跟一般的变量一样用在赋值语句和表达式中,如果是一个方法也可以像调用函数一样调用方法举例如下图:

'abc'.upper()#'abc'是一个字符串对象,upper()是一个变为大写的方法,'abc'.upper()调用这个方法,它会返回一个新的大写的'ABC'字符串对象,所以它也可以当做赋值语句右边的一个表达式,然后你可以赋值、打印、或者保存在文件中。
(1+2j).real  #属性也是一样的比如(1+2j)实部为1虚部为2这么一个复数对象,如果在后面加上一个.real就返回它的实部属性1.0
(1+2j).imag  #调用虚部就得到虚部属性值2.0
#所以对象的属性表和方法的引用几乎跟变量是一样的用法

3.2、python语言动态的特征,使得对象可以随时增加或者删除属性或者方法举例如下图所示:

print(f3.fx,f3.fy)#比如说f3是一个对象它有两个属性fx,fy对属性值进行输出
f3.fz = 3.4#前面f3这个对象没有fz这个属性可以直接进行添加,添加的方法就是直接对其赋值就可以了
print(f3.fz)#输出fz属性值
del f3.fz#也可以删除f3对象的属性语法就是del(对象名).(属性或者方法)
#输出
0.0  4.5 #fx/fy属性值
3.4#fz属性值
4.面向对象编程:面向对象编程(OOP)是一种程序设计范型,同时也是一种程序开发方法

4.1、程序中包含各种独立而又能互相调用的对象,每个对象都能接受、处理数据并将数据传递给其他对象,在面向对象的编程当中,基本上程序当中所看到的这些数据,它都会以及数据的处理都封装成对象,然后在对象之间相互调用,对象之间相互传递这些数据
4.2、传统程序设计:将程序看作一系列函数或指令的集合

你可能感兴趣的:(面向对象/什么是对象)