Python零基礎入門十六之繼承

2021-07-26 03:54:29 字數 3731 閱讀 5006

class

parent:

defhello

(self):

print("正在呼叫父類的方法.....")

class

child

(parent):

# pass

defhello

(self):

print("正在呼叫子類的方法.....")

p=parent()

p.hello()

c=child()

c.hello()

在類的繼承中需要注意的幾個問題:

(1)如果子類中定義與父類同名的方法或者屬性則會自動覆蓋父類對應的方法或者屬性。

import random as r

class

fish:

def__init__

(self):

self.x=r.randint(0,10)

self.y=r.randint(0,10)

defmove

(self):

self.x-=1

print("我的位置是:",self.x,self.y)

class

goldfish

(fish):

pass

class

carp

(fish):

pass

class

salmon

(fish):

pass

class

shark

(fish):

def__init__

(self):

#呼叫未繫結的父類方法,傳進去的是子類的例項化物件

#fish.__init__(self)

#使用super()函式

super().__init__()

self.hungry=true

defeat

(self):

if self.hungry:

print("吃貨的夢想是天天有的吃")

self.hungry=false

else:

print("太撐了,吃不下了")

shark=shark()

shark.move()

#這樣寫的話程式會報錯,因為子類shark重寫了了

#__init__方法,這樣就會覆蓋父類的__init__方法

(2)python還支援多重繼承

class

base1:

deffoo1

(self):

print("我是foo1,我為base1代言...")

class

base2:

deffoo2

(self):

print("我是foo2,我為base2代言...")

class

c(base1,base2):

pass

c=c()

c.foo1()

c.foo2()

(3)當幾個類之間沒有直接的繼承關係時我們可以使用組合。

例如下面**中的turtle、fish、pool三個類,它們之間並沒有明顯的繼承關係,但是使用組合卻可以很方便的解決這幾個類之間的問題。下面**就解決了輸出池塘中有多少只金魚和烏龜的問題。主要解決辦法就是將烏龜和金魚類的例項化放進池塘的類中。

class

turtle:

def__init__

(self,x):

self.num=x

class

fish:

def__init__

(self,x):

self.num=x

class

pool:

def__init__

(self,x,y):

#將類的例項化放到另乙個類中

self.turtle=turtle(x)

self.fish=fish(y)

defprint_num

(self):

print("水池裡總共有烏龜%d只,小魚%d條!"%(self.turtle.num,self.fish.num))

pool=pool(1,10)

pool.print_num()

最後補充一些關於類的內建函式:

#前面是子類,後面是基類

#issubclass(class,classinfo)

#判斷乙個類是否為另乙個類的子類

#乙個類被認為是自身的子類

class

a:pass

class

b(a):

pass

print(issubclass(b,a))

#isinstance(object,classinfo)

#前面是乙個例項化物件,後面是類

#檢查例項物件是否屬於這個類

b1=b();

print(isinstance(b1,b))

#hasattr(object,name)

#測試乙個物件是否有特定的屬性

class

c:def

__init__

(self,x=0):

self.x=x#一定要注意python沒有變數的定義

c1=c()

print(hasattr(c1,"x"))

#getattr(object,name[,default])

#返回物件指定的屬性值,如果不存在,列印設定的預設值

print(getattr(c1,'x'))

print(getattr(c1,'y',"您訪問的引數不存在"))

#setattr(object,name,value)

#設定屬性的值,如果不存在,會自動新建

setattr(c1,"y","yaoxiangxi")

print(getattr(c1,'y',"您訪問的引數不存在"))

#delattr(object,name)

#刪除屬性

delattr(c1,'y')

#property(fget=none,fset=none,fdel=none,doc=none)

#通過屬性設定屬性

class

c:def

__init__

(self,size=10):

self.size=size

defgetsize

(self):

return self.size

defsetsize

(self,value):

self.size=value

defdelsize

(self):

del self.size #刪除某個屬性

#便於**的修改

關於最後的property將在描述符的部落格中做詳細的解釋。

Python零基礎入門之函式

函式的命名空間和作用域 函式的三類命名空間 內建 全域性 區域性 兩大作用域 全域性 內建和全域性命名空間都屬於全域性作用域 區域性 區域性命名空間屬於區域性作用域 什麼是作用域鏈?就是由外而內的命名空間中的中的變數的生存週期都是就近原則 全域性作用域 大區域性作用域 小區域性作用域 函式的兩大引數...

Python零基礎入門

python零基礎入門 第一周前言 最近在簡單學習python,在之前的學習中也只對c語言有了乙個粗略的了解,可以說在程式設計方面沒有什麼基礎,當然這也是我第一次寫部落格,希望自己越學越好,希望自己加油 在這一周中,還是學習到了不少的東西,也希望把自己學到的東西寫下來,來加強對python的學習,若...

Python入門零基礎

開始認識 不要害怕面對一串密密麻麻的英文本元。如果你將它們獨自分開,你會發現它們就像英文單詞,都有固定的作用。不要被第一眼的陌生感所產生的恐懼給蒙蔽。而要將 看成 變數 可以用來儲存字面量,變數本身沒有任何意思 如 a hello world abc 1,dfg 2,c abc dfg。其中a ab...