關於python的類的繼承中需要注意的細節

2021-10-09 03:24:28 字數 4252 閱讀 8872

1.在類裡面方法之外定義的屬性必定不能被self修飾–【類裡面方法之外定義的屬性–類屬性】

2.對於有self字首修飾的變數都必須有將類例項化才能使用–【self字首修飾的變數–例項變數】

3.init 函式只會在類例項化時呼叫

當使用的子類的init()函式重寫時:

4.子類例項化時並不會例項化乙個無名基類(父類)

5.類的封裝性不足,子類可呼叫父類的私有方法–當父類私有方法沒有使用例項變數時不會出錯

當使用的子類的init()函式繼承於父類時:

4.子類例項化時會例項化乙個無名基類(父類)

5.類的封裝性不足,子類可呼叫父類的私有方法–當父類私有方法使用例項變數時也不會出錯

樣例1classprogramming.py

class

person

:# 定義在類內部但在方法之外, 被稱為類屬性

*** =

'man'

"""在類裡面方法之外定義的屬性必定不能被self修飾"""

def__init__

(self)

:"""self 指的是類的例項本身,模擬c++中的this,

所以對於有self字首修飾的變數都必須有將類例項化才能使用"""

# init 函式只會在類例項化時呼叫

# 定義該普通變數weight,受限於定義域

weight =

45 self.name =

'#person#'

self.age =

0print

('this is person __init__ function'

)def

print_message

(self)

:print

('this is public function.'

)def

__print_message2

(self)

:print

('this is private function.'

)def

using_pri_func

(self)

: self.__print_message2(

)def

get_name

(self)

:return self.name

defget_age

(self)

:return self.age

class

student

(person)

:def

__init__

(self)

: self.name =

'eugene-forest'

print

('this is student __init__ function'

)"""man = person()

man.print_message()

# 可通過該格式訪問私有函式,側面說明封裝性的不足

man._person__print_message2()"""

usingstu.py

from classpro import student

try:

stu = student(

)print

(stu.get_name())

print

(stu.***)

# print(stu.weight)

print

(stu.get_name())

stu.print_message(

) stu.using_pri_func(

) stu._person__print_message2(

)print

(stu.get_age())

except attributeerror:

print

("'student' object has no attribute '***'"

)

**

this is studentinitfunction

eugene-forest

maneugene-forest

this is public function.

this is private function.

this is private function.

『student』 object has no attribute 『***』

process finished with exit code 0**

樣例二

ps:將student的init()函式注釋掉

classprogramming.py

class

person

:# 定義在類內部但在方法之外, 被稱為類屬性

*** =

'man'

"""在類裡面方法之外定義的屬性必定不能被self修飾"""

def__init__

(self)

:"""self 指的是類的例項本身,模擬c++中的this,

所以對於有self字首修飾的變數都必須有將類例項化才能使用"""

# init 函式只會在類例項化時呼叫

# 定義該普通變數weight,受限於定義域

weight =

45 self.name =

'#person#'

self.age =

0print

('this is person __init__ function'

)def

print_message

(self)

:print

('this is public function.'

)def

__print_message2

(self)

:print

('this is private function.'

)def

using_pri_func

(self)

: self.__print_message2(

)def

get_name

(self)

:return self.name

defget_age

(self)

:return self.age

class

student

(person)

:pass

"""def __init__(self):

self.name = 'eugene-forest'

print('this is student __init__ function')"""

"""man = person()

man.print_message()

# 可通過該格式訪問私有函式,側面說明封裝性的不足

man._person__print_message2()"""

usingstu.py

from classpro import student

try:

stu = student(

)print

(stu.get_name())

print

(stu.***)

# print(stu.weight)

print

(stu.get_name())

stu.print_message(

) stu.using_pri_func(

) stu._person__print_message2(

)print

(stu.get_age())

except attributeerror:

print

("'student' object has no attribute '***'"

)

**this is personinitfunction

#person#

man#person#

this is public function.

this is private function.

this is private function.

0process finished with exit code 0**

python中關於類和類繼承的語句解讀

1.關於類 關於類的定義 class animal object species animal 類變數 def init self,name 類的建構函式 self.name name 定義並賦值類變數 self.attributes 定義並賦值類變數 def add attributes self...

python 中類的繼承

python 中的類可以繼承父類這是眾所周知的。突然發現遇到乙個問題,如果父類和子類都含有某個方法,是採用什麼掉用方式呢,我想的是會呼叫之類方法,如果不存在,則呼叫父類方法。python 應該滿足該就近原則。還是動手驗證下記得清楚,儲存檔案為test.py class parent object d...

python中類的繼承

物件導向程式設計 oop 語言的乙個主要功能就是 繼承 繼承是指這樣一種能力 它可以使用現有類的所有功能,並在無需重新編寫原來的類的情況下對這些功能進行擴充套件。class person object 定義乙個父類 deftalk self 父類中的方法 print person is talkin...