Python物件導向

2021-07-29 17:16:42 字數 3998 閱讀 5066

class

singleton

(object):

def__new__

(cls, *args, **kwargs):

# 如果_instance這個屬性不在本物件的字典__dict__裡面的話

ifnot

'_instance'

in cls.__dict__:

# 通過父類object生成乙個_instance物件,這個物件是singleton的例項

cls._instance = object.__new__(cls)

# 也可以用這個語句,方法相同,呼叫super父類的物件

cls._instance = super(singleton,cls).__new__(cls)

#返回該例項

return cls._instance

# 不過需要傳入的是,這個函式的例項化物件

print program.get_age(program)

classname.get_class_name()
# 例如下面這個函式

defget_method_name

():pass

# 不加@property的時候使用例項名+函式名呼叫

instanceclass.get_method_name()

# 新增property屬性的時候

@property

defget_method_name

():pass

# 呼叫get_method_name方法

# 原來的函式呼叫方法get_method_name()已經不能夠使用了

instanceclass.get_method_name

# 是否是該program物件的例項

print isinstance(backprogram, program)

# newtype是否是program的子類

print issubclass(newtype, program)

# python 先呼叫__new__,在new中的args引數將需要的引數變數傳入

# 之後再呼叫__init__方法,生成新的例項

class

backprogram

(program):

def__init__

(self, name, age, description, ***):

super(backprogram, self).__init__(name, age, description)

self.__*** = ***

print

'__init__'

def__new__

(cls, *args, **kwargs):

print args

print

'__new__'

return super(backprogram, cls).__new__(cls)

def

__add__

(self, other):

if isinstance(other, magicmethod):

return other.__age + self.__age

else :

raise typeerror("this is not magicmethod's instance")

# 在魔術方法中預算是從左往右的,一旦出現不是兩個相同類的例項進行計算,會先丟擲最左邊的乙個類的錯誤

# 但是如果在最左邊那個例項沒有丟擲異常的話,則無法進行運算, 返回錯誤。沒有指定的運算屬性

print onemagicmethod + twomagicmethods

class

property

(object):

def__init__

(self, name):

self.__name = name

# print輸入字串

# 該字串是給使用者**的,內容

# 該方法同時和__repr__定義時,__repr__方法被遮蔽

def__str__

(self):

return

'property name ' + self.__name

# 顯示這個類有多少屬性

def__dir__

(self):

return self.__dict__.keys()

# 列印字串,機器類**

def__repr__

(self):

return

'jfskfjsl'

if __name__ == '__main__':

property = property('name')

print property

print property.__dict__

# getattr

# 獲取物件object的屬性或者方法,如果存在列印出來,如果不存在,列印出預設值,預設值可選。

# 需要注意的是,如果是返回的物件的方法,返回的是方法的記憶體位址,如果需要執行這個方法,

# 可以在後面新增一對括號。

>>>

class

test

():... name="xiaohua"

...

defrun

(self):

...

return

"helloword"

...>>> t=test()

>>> getattr(t, "name") #獲取name屬性,存在就列印出來。

'xiaohua'

>>> getattr(t, "run") #獲取run方法,存在就列印出方法的記憶體位址。

0x0269c878>>

>>> getattr(t, "run")() #獲取run方法,後面加括號可以將這個方法執行。

'helloword'

>>> getattr(t, "age") #獲取乙個不存在的屬性。

traceback (most recent call last):

file "", line 1, in

attributeerror: test instance has no attribute 'age'

>>> getattr(t, "age","18") #若屬性不存在,返回乙個預設值。

'18'

>>>

# setattr

# 給物件的屬性賦值,若屬性不存在,先建立再賦值。

>>>

class

test

():... name="xiaohua"

...

defrun

(self):

...

return

"helloword"

...>>> t=test()

>>> hasattr(t, "age") #判斷屬性是否存在

false

>>> setattr(t, "age", "18") #為屬相賦值,並沒有返回值

>>> hasattr(t, "age") #屬性存在了

true

>>>

在python中,當乙個module作為整體被執行時,moduel.__name__的值將是』__main__』;

而當乙個 module被其它module引用時,module.__name__將是module自己的名字,當然乙個module被其它module引用時,其本身並不需要乙個可執行的入口main了。

>>> 

import hello

>>> hello.__name__

'hello'

python物件導向學習 python物件導向學習

物件導向最重要的概念就是類 class 和例項 instance 必須牢記類是抽象的模板,比如student類,而例項是根據類建立出來的乙個個具體的 物件 每個物件都擁有相同的方法,但各自的資料可能不同。物件導向三個概念 1.封裝 即把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法讓可信的類進...

python物件導向總結 Python物件導向總結

python 物件導向 oop 1 物件導向 是乙個更大封裝,把乙個物件封裝多個方法 2 類 是對一些具有相同特徵或行為的事物的乙個統稱,是抽象的,不能直接使用 特徵被稱為屬性 行為被稱為方法 3 物件 是由類建立出來的乙個具體的存在,可以直接使用 先有類再有物件,類只有乙個,而物件可以有多個 類中...

python登入物件導向 python 物件導向

一 屬性和方法 1.a a 例項屬性 通過例項物件來新增的屬性就是例項屬性 a.count 10 例項方法都是在類中直接定義的 以self為第乙個引數的方法都是例項方法 當通過例項物件呼叫時,會自動傳遞當前物件作為self傳入 當通過類物件呼叫時,不會自動傳遞self a.test 等價於 a.te...