How to select all attributes of object type
I think this might be the kind of thing you need.

WITH get_detail
  AS (SELECT get_addr(col1) AS obj_type from my_test)
SELECT x.obj_type.district_name FROM get_detail x
/


This is what I created to test it out.

CREATE OR REPLACE TYPE my_ADDRESS_DETAIL_T AS OBJECT 
(
 apt_number        NUMBER,
 district_name     NVARCHAR2(40),
 zipcode           NUMBER
)
/
create table my_test
(col1 number,
 addr_detl my_address_detail_t)
/
INSERT INTO my_test
values(1, my_address_detail_t(1,'HOME',12345))
/
commit
/


And the function;

CREATE OR REPLACE FUNCTION my_get_addr(addr_id IN NUMBER)
RETURN my_address_detail_t IS
addr_t my_address_detail_t; 
BEGIN
SELECT addr_detl
  INTO addr_t
  FROM my_test
 WHERE col1 = addr_id;

RETURN addr_t;
END; 


You will obviously need to define a join somewhere for get_detail to have the correct col1 to retrieve data for. Im not really sure of the full requirement so haven't tried that bit but this should give you the basics.