1. 程式人生 > >面向物件程式設計(一)建立類,例項化,屬性引用

面向物件程式設計(一)建立類,例項化,屬性引用

  在python中,用變量表示特徵,用函式表示技能,因而類是變數與函式的結合體,物件是變數與方法(指向類的函式)的結合體。

class 類名:#定義一個類
    類體

  類有兩種作用:屬性引用和例項化
t=類名()#例項化
 
類名加括號就是例項化,會自動觸發__init__函式的執行,可以用它來為每個例項定製自己的特徵
class 類名:
    def __init__(self,x):#self的作用是在例項化時自動將物件/例項本身傳給__init__的第一個引數,self可以是任意名字
        self.x=x     #給__init__的第一個引數,self可以是任意名字
t=類名(特徵)
        
資料呼叫
class 類名:
    w=1
    def __init__(self,x):
        self.x=x
    def foo(self):
        print('foo')
t=類名(引數)
t.w=1#呼叫變數
t.foo()#呼叫函式

  物件/例項本身只有資料屬性,但是python的class機制會將類的函式繫結到物件上,稱為物件的方法,或者叫繫結方法,繫結方法唯一繫結一個物件,同一個類的方法繫結到不同的物件上,屬於不同的方法,記憶體地址都不會一樣。

  物件的繫結方法的特別之處在於:obj.func()會把obj傳給func的第一個引數。

==========================

  建立一個類就會建立一個類的名稱空間,用來儲存類中定義的所有名字,這些名字稱為類的屬性
而類有兩種屬性:資料屬性和函式屬性。其中類的資料屬性是共享給所有物件的,而類的函式屬性是繫結到所有物件的。

class Star:
    x=1
    def __init__(self,name):
        self.name=name

    def foo(self):
        return 'foo from {} '.format(self.name)
tom=Star('tom')
jack=Star('jack')
print(tom.x,id(tom.x))#1 記憶體地址1763226688
print(jack.x,id(jack.x))#1 記憶體地址1763226688
print(tom.foo(),tom.foo)     # foo from tom  <bound method Star.foo of <__main__.Star object at 0x000001DD163FD588>>
print(jack.foo(),jack.foo)    #foo from jack  <bound method Star.foo of <__main__.Star object at 0x000001DD163FD5C0>>

建立一個物件/例項就會建立一個物件/例項的名稱空間,存放物件/例項的名字,稱為物件/例項的屬性。
在obj.name會先從obj自己的名稱空間裡找name,找不到則去類中找,類也找不到就找父類...最後都找不到就丟擲異常  

print(tom.__dict__)#{'name': 'tom'}
print(jack.__dict__)#{'name': 'jack'}
print(Star.__dict__)#{'__module__': '__main__', 'x': 1,
#  '__init__': <function Star.__init__ at 0x000001FCEB7BB8C8>, 
# 'foo': <function Star.foo at 0x000001FCEB7BB950>, 
# '__dict__': <attribute '__dict__' of 'Star' objects>, 
# '__weakref__': <attribute '__weakref__' of 'Star' objects>, 
#'__doc__': None}


相關推薦

面向物件程式設計建立例項屬性引用

  在python中,用變量表示特徵,用函式表示技能,因而類是變數與函式的結合體,物件是變數與方法(指向類的函式)的結合體。 class 類名:#定義一個類 類體   類有兩種作用:屬性引用和例項化 t=類名()#例項化 類名加括號就是例項化,會自動觸發__in

Python篇----面向物件程式設計物件

1 概述     簡稱:OOP(Oriented Object Programming)。這是一種以構建物件,程式設計實現為方向的語言。現實世界中,許多問題過於複雜,需要拆分,所以用不同的物件代替各

淺談PHP面向物件程式設計

傳統的面向過程   將要完成的工作,分作若干個步驟,或再細分為子步驟,然後後步驟從前往後一步一步完成,最初達致目標。 現代的面向物件   將要完成的工作拆分為“一個一個物件”的任務(功能),每個物件獨自完成自己的任務,任務之間的連結通過“呼叫”來實現,最終也完成了整體的工

C語言面向物件程式設計:封裝與繼承

最近在用 C 做專案,之前用慣了 C++ ,轉回頭來用C 還真有點不適應。 C++ 語言中自帶面向物件支援,如封裝、繼承、多型等面向物件的基本特徵。 C 原本是面向過程的語言,自身沒有內建這些特性,但我們還是可以利用 C 語言本身已有的特性來實現面向物件的一些基本特徵。接下來

JS:面向物件程式設計

Declare JavaScript Objects as Variables 在我們深入 面向物件程式設計之前 ,讓我們先回顧一下Javascript的 物件(Object) Construct JavaScript Objects with Functions 除了上一種方

Javascript 面向物件程式設計:封裝

Javascript是一種基於物件(object-based)的語言,你遇到的所有東西幾乎都是物件。但是,它又不是一種真正的面向物件程式設計(OOP)語言,因為它的語法中沒有class(類)。 那麼,如果我們要把"屬性"(property)和"方法"(method),封裝成

BC404學習筆記-ABAP面向物件程式設計-基礎

只摘錄注意事項和難以理解的地方。總的來說和JAVA、C++面向物件程式設計技術差不太多。類、繼承、封裝之類的概念在abapoo中也都有體現。面向物件的物件簡單理解就是現實世界的事物,到程式設計世界就用

JS面向物件實戰——建立一個新的函式物件的兩種習慣

JavaScript面向物件(一)——建立一個新的函式物件的兩種習慣 工作中可能習慣建立一個函式物件的方式,管理一個模組。那麼針對建立一個函式物件,一般有兩種習慣方式:偏向鏈式程式設計;偏向類 不能汙染函式祖先Function。 我們如果想新增一個方法

18.python面對物件程式設計—什麼是面向物件例項訪問限制

終於開始了python的核心內容了,前面都是細枝末節的小東西。先開始第一個話題,什麼是面向物件的程式設計(opp)。1)什麼是面向物件我們可以拿C語言這個典型的面向過程的程式語言來對比,面對同樣一個問題,”我吃飯“(原諒我是個吃貨)。面向過程關注的是吃這個動作。而面向物件關注

JavaScript基礎——面向物件程式設計建立物件的幾種方式總結

簡介 面向物件(Object-Oriented, OO)的語言有一個標誌,那就是它們都有類的概念,而通過類可以建立任意多個具有相同屬性和方法的物件。前面提到過,ECMAScript中沒有類的概念,因此它的物件也與基於類的語言中的物件有所不同。 ECMA-262把物件定義為:

王穎奇 20171010129《面向物件程式設計java》第十週學習總結

  實驗十一   集合 實驗時間 2018-11-8 1、實驗目的與要求 (1) 掌握Vetor、Stack、Hashtable三個類的用途及常用API; (2) 瞭解java集合框架體系組成; (3) 掌握Array

徐思/楊玲《面向物件程式設計Java》第十週學習總結

一、理論知識部分 一般將資料結構分為兩大類:線性資料結構和非線性資料結構。線性資料結構:線性表、棧、佇列、串、陣列和檔案。非線性資料結構:樹和圖。 線性表按其儲存結構可分為順序表和連結串列;用順序儲存結構儲存的線性表稱為順序表;順序表將線性表中的資料元素依次存放在某個儲存區域中。一維陣列就是用順序方式儲存

李曉菁201771010114《面向物件程式設計Java》第十週學習總結

集合 一:.資料結構介紹 1.一般將資料結構分為兩大類:線性資料結構和非線性資料結構。 (1)線性資料結構:線性表、棧、佇列、串、陣列和檔案。 (2)非線性資料結構:樹和圖。 2.線性表: 3.連結串列:(1)單向連結串列 (2)迴圈連結串列 (3)雙向迴圈連結串列 4.棧:棧(Stack)

201771010113 李婷華 《面向物件程式設計Java》第十週總結

一.理論知識部分 第九章  集合 1.資料結構介紹: 線性結構:線性表,棧,佇列,串,陣列,檔案。非線性結構:樹,圖。 散列表:又稱為雜湊表。 散列表演算法的基本思想是:以結點的關鍵字為自變數,通過一定的函式關係(雜湊函式)計算出對應的函式值,以這個值作為該結點儲存在散列表中的地址。當散列

201771010112羅鬆《面向物件程式設計java》第十週學習總結

 1、實驗目的與要求 (1) 掌握Vetor、Stack、Hashtable三個類的用途及常用API; (2) 瞭解java集合框架體系組成; (3) 掌握ArrayList、LinkList兩個類的用途及常用API。 (4) 瞭解HashSet類、TreeSet類的用途及常用AP

王豔 201771010127《面向物件程式設計java》第十週學習總結

一:理論部分。 1.資料結構:分為a.線性資料結構,如線性表、棧、佇列、串、陣列和檔案。                           b.非線性資料結構,如樹和圖。

馬昕璐/唐月晨 《面向物件程式設計java》第十週學習總結

一:理論部分。 一般將資料結構分為兩大類:線性資料結構和非線性資料結構 線性資料結構:線性表、棧、佇列、串、陣列和檔案 非線性資料結構:樹和圖。 線性表:1.所有資料元素在同一個線性表中必須是相同的資料型別。 2. 線性表按其儲存結構可分為順序表和連結串列 3. 用順序儲存結構儲存的線性表稱為順序

王之泰/王志成《面向物件程式設計java》第十週學習總結

第一部分:理論知識學習部分 第十一章理論知識主要為集合類的介紹,在實驗中都有所體現且本週主要複習回顧上週的泛型程式設計 第二部分:實驗部分 ——集合 1、實驗目的與要求 (1) 掌握Vetor、Stack、Hashtable三個類的用途及常用API; (2) 瞭解jav

201771010101 白瑪次仁《面向物件程式設計Java》第十週學習總結

實驗十一   集合 實驗時間 2018-11-8 1、實驗目的與要求 (1) 掌握Vetor、Stack、Hashtable三個類的用途及常用API; (2) 瞭解java集合框架體系組成; (3) 掌握ArrayList、Lin