python繼承
① python中的類怎麼繼承
#-*- coding:utf-8 -*-class Animal(object):
"""docstring for Animal"""
def __init__(self, name):
self.name = name def run(self):
print 'Animal is running...'class Dog(Animal):
"""docstring for Dog"""
def __init__(self,name):
# super(Dog, self).__init__(name)
Animal.__init__(self,name) def printName(self):
print 'Name: %s' % self.name
kk=Dog("kity")
kk.printName()
kk.run()
② Python繼承問題
icecreamstand的構造函數是雙下劃線
③ python 類的繼承
可能你有C++的基礎吧,C++確實可以不用帶上this。
我把你的代碼稍微改了一下,你可以分別看看cls1.n、cls2.n、self.n的輸出。
class cls1:
n=3
class cls2(cls1):
def __init__(self,cls1=cls1):
cls2.n += 1
self.n += 2
print 'cls1.n:%s'%cls1.n
print 'cls2.n:%s'%cls2.n
print 'self.n:%s'%self.n
cls2()
print 'cls1.n:%s'%cls1.n
可以看出兩個類和一個對象都可以在這里調用它們的n屬性,如果只敲一個n別人讀你的代碼時就比較容易產生岐義,雖然少打了5個字元,但是不符合簡單明確的pythonic哲學。
當然你也可以就認為python語法規則就是這么規定的。
④ Python中的繼承是什麼意思
繼承是子類復用父類的屬性和方法的機制,類的繼承是以生活中繼承為靈感設計的。
生活中繼承的例子有很多,例如,汽車的發展歷程就體現了繼承。最早汽車的輪胎都是實心的,功能少,性能差,而如今汽車的功能越來越多,性能越來越好,這是經過一代一代的發展而來的,每一代比上一代擴充了一些功能,改進了一些性能。縱觀整個汽車的發展史,每一代汽車都是在上一代汽車的特徵和行為的基礎之上,進行了設計和改良。這其中有些功能沒有改變,有些功能是新增的,也有些功能經過了改良。例如,從第一代的汽車到現在的汽車,做交通工具這一特點始終都在沿用。
生活中汽車的例子,與計算機中的繼承是非常相似的。這么一代又一代的更新是有好處的。
首先,節省了設計流程,不用閉門造車。
其次,在前一代汽車基礎之上設計,這樣原來重復的生產技術還可以復用,再設計一些新增的功能,這樣就能大大地提高生產效率。
下面介紹一個實際案例,來說明繼承的用處。
假設設計一個師生管理系統,具有學生和教師兩種用戶,需要設計兩個類,一個學生類(Student),一個教師類(Teacher)。Student類有學號、姓名、性別、年齡、用戶名、密碼等屬性,Teacher類有姓名、性別、年齡、用戶名、密碼、學歷等屬性,這兩個類中都有屬性的getter和setter方法。由此可知,這兩個類中有許多相同的屬性和方法,也就是說代碼有冗餘。為了避免這樣的情況,就可以使用繼承來優化設計。將Student類和Teacher類中相同的屬性和方法抽取出來,單獨作為一個父類,這個父類稱為用戶類(User),而Student類和Teacher類作為子類繼承父類User。Student類和Teacher類中就只放自己特有的屬性和方法即可。由於這兩個類都繼承User類,因此User類中的屬性和方法,它們可以直接使用。需要指出的是,在繼承中私有屬性和私有方法是不能被繼承的。
繼承提高了代碼的重用性,減少了代碼和數據的冗餘度。另外,如果要修改用戶名屬性,不採用繼承的情況下,兩個類的屬性都需要修改,而使用繼承後,只需要修改父類的用戶名屬性即可。由此可知,繼承使代碼的修改更加方便。
關於Python的基礎問題可以看下這個網頁的視頻教程,網頁鏈接,希望我的回答能幫到你。
⑤ 繼承在Python:什麼問題,怎麼解決
多重繼承的陷阱:鑽石繼承(菱形繼承)問題
支持多繼承的面向對象編程都可能會導致鑽石繼承(菱形繼承)問題,看以下代碼:
class A():
def __init__(self):
print("進入A…")
print("離開A…")
class B(A):
def __init__(self):
print("進入B…")
A.__init__(self)
print("離開B…")
class C(A):
def __init__(self):
print("進入C…")
A.__init__(self)
print("離開C…")
class D(B, C):
def __init__(self):
print("進入D…")
B.__init__(self)
C.__init__(self)
print("離開D…")
>>> d = D()
進入D…
進入B…
進入A…
離開A…
離開B…
進入C…
進入A…
離開A…
離開C…
離開D…
- 為什麼叫鑽石繼承(菱形繼承),看下圖就明白名字的由來了:
復制代碼
⑥ python屬性可以繼承嗎繼承
python屬性可以繼承,但是不支持私有繼承。
繼承是面向對象的重要特徵之一,繼承是兩個類或者多個類之間的父子關系,子進程繼承了父進程的所有公有實例變數和方法。繼承實現了代碼的重用。重用已經存在的數據和行為,減少代碼的重新編寫,python在類名後用一對圓括弧表示繼承關系, 括弧中的類表示父類,如果父類定義了__init__方法,則子類必須顯示地調用父類的__init__方法,如果子類需要擴展父類的行為,可以添加__init__方法的參數。
⑦ Python繼承父類parent的正確格式為
格式:
class 子類名(父類1,父類2)
類的繼承就是讓子類擁有父類的屬性和方法。
幾個注意:py支持多繼承
子類繼承的父類只能初始化一次,如果父類1和父類2有共同的父類或者祖先類,則類初始化的時候會失敗。
當父類具有相同方法時,會調用最先繼承的父類中的方法,如果要指定父類,則需要重寫此方法,並通過父類名.方法名來調用指定父類方法。
⑧ Python中繼承的理解與運用
9.5. 繼承
當然,如果一種語言不支持繼承就,「類」就沒有什麼意義。派生類的定義如下所示:
class DerivedClassName(BaseClassName):
命名 BaseClassName (示例中的基類名)必須與派生類定義在一個作用域內。除了類,還可以用表達式,基類定義在另一個模塊中時這一點非常有用:
class DerivedClassName(modname.BaseClassName):
派生類定義的執行過程和基類是一樣的。構造派生類對象時,就記住了基類。這在解析屬性引用的時候尤其有用:如果在類中找不到請求調用的屬性,就搜索基類。如果基類是由別的類派生而來,這個規則會遞歸的應用上去。
派生類的實例化沒有什麼特殊之處: DerivedClassName() (示列中的派生類)創建一個新的類實例。方法引用按如下規則解析:搜索對應的類屬性,必要時沿基類鏈逐級搜索,如果找到了函數對象這個方法引用就是合法的。
派生類可能會覆蓋其基類的方法。因為方法調用同一個對象中的其它方法時沒有特權,基類的方法調用同一個基類的方法時,可能實際上最終調用了派生類中的覆蓋方法。(對於 C++ 程序員來說,Python 中的所有方法本質上都是 虛 方法。)
派生類中的覆蓋方法可能是想要擴充而不是簡單的替代基類中的重名方法。有一個簡單的方法可以直接調用基類方法,只要調用: BaseClassName.methodname(self, arguments)。有時這對於客戶也很有用。(要注意只有 BaseClassName 在同一全局作用域定義或導入時才能這樣用。)
Python 有兩個用於繼承的函數:
函數 isinstance() 用於檢查實例類型: isinstance(obj, int) 只有在 obj.__class__ 是 int 或其它從 int 繼承的類型
函數 issubclass() 用於檢查類繼承: issubclass(bool, int) 為 True,因為 bool 是 int 的子類。
然而, issubclass(float, int) 為 False,因為 float 不是 int 的子類。
⑨ Python中類繼承問題
Python新式類採用MRO演算法處理繼承關系,當調用c.say()方法時首先查找C類中是否定義了say()方法,若沒有繼續查找B類中是否定義了say()方法,找到B類中定義有say()方法,因此使用B類的say()方法。
⑩ Python繼承
expected an idented block 代表縮進有問題。
沒有看到你寫的代碼,所以你自己檢查下代碼縮進都調整好了沒。
不知道你的代碼是不是直接照搬了書上的代碼,包括"#put code here to ...",這些是讓你指導你的引導,並不是代碼,也就是你的":"後面沒有代碼,所以程序沒法運行。簡單的解決辦法是冒號後面都加上 pass 這個空語句,保持程序完整性,可以運行,然後再添加自己的代碼。
祝成功!