《笨辦法學Python》 第45課手記

2022-09-18 10:51:36 字數 3036 閱讀 3965

本節課將物件和類以及他們之間的從屬關係。

從整個電腦科學的角度來說,物件是對客觀事物的抽象,類是對物件的抽象。類和物件都是一種抽象的資料型別。

物件:是指在應用問題**現的各種實體、事件和規格說明等,它是由一組屬性和在這組值上的一組服務(這裡的服務指的是操作,就是我們寫在類裡的函式所提供的功能,本文作者注)構成的,其中屬性值確定了物件的狀態。

:把具有相同屬性和服務的物件歸到同一類,而把乙個類中的的每乙個物件稱為該類的乙個例項,他們具有相同的服務。

繼承:物件導向方法最有特色的方面。

繼承性(inheritance)是指,在某種情況下,乙個類會有「子類」。子模擬原本的類(稱為父類)要更加具體化。(該段不是書中內容,為作者新增)

原**如下:

## animal is-a object(yes, sort of confusing)look at the extra credit

class

animal(object):

pass

## dog is-a class

class

dog(animal):

def__init__(self,name)

##dog has-a object

self.name = name

## cat is-a class

class

cat(animal):

def__init__(self,name):

## cat has-a object

self.name = name

## person is-a class

class

person(object):

def__init__(self,name)

## person has-a object

self.name = name

## person has-a pet of some kind

self.pet = none

## employee is-a class

class

employee(person):

def__init__(self, name, salary)

## employee inherit person hmm what is this strange magic?

super(employee, self).__init__(name)

## person has-a salary

self.salary = salary

## fish is-a object

class

fish(object):

pass

## salmon is-a class

class

salmon(fish)

pass

## halibut is-a class

class

halibut(fish)

pass

## rover is-a dog

rover = dog("rover")

## satan is-a cat

satan = cat("satan")

## mary is-a person

mary = person("mary")

## mary has-a pet

mary.pet = satan

## frank is-a employee

frank = employee("frank", 120000)

## frank has-a pet

frank.pet = rover

## flipper is-a fish

flipper = fish()

## crouse is-a salmon

crouse = salmon()

## harry is a halibut

harry = halibut()

通過這段**,我們得記住,類既可以在物件上定義,也可以在其他類上定義(體現繼承性)。

super

(employee, self).__init__

(name)

super函式是在python2.2後被新增的函式,用來實現類的繼承。

super(type[, object-or-type])

return the superclass of

type. if the second argument is omitted the super object

returned is unbound. if the second argument is an object, isinstance(obj, type)

must be true. if the second argument is a type, issubclass(type2, type) must be

true. super() only works for

new-style classes.

a typical use for calling a cooperative superclass method

is:class c(b):

def meth(self, arg):

super(c, self).meth(arg)

newin version 2.2.

super(b, self).init()是這樣實現繼承的:super(b, self)首先找b的父類(就是類a),然後把類b的物件self轉換為類a的物件,然後被轉換後的類a物件呼叫自己的init函式。

super 這種用法只有指明子類的機制,雖然是一種解決缺陷的辦法但是可能也存在問題。而多繼承類定義中有其他的方式,我們以後碰到再講。

更詳細的講解在這裡:

《笨辦法學Python》 第4課手記

這節課目的是讓你掌握變數,跟c語言非常類似,很簡單。左邊是變數名用 號給變數賦值。不同的是我沒有看到變數宣告,作者是直接賦值,拿過來就用的。至於接下來作者舉的報錯那個例子,如果你把變數名打錯的情況下就會出現,因為變數名一旦打錯,python將不能識別,也就無法在print中輸出對應的值。這裡我們可以...

《笨辦法學Python》 第6課手記

第6課講字串和文字,作者給出的 如下 x there are d types of people.10 binary binary do not don t y those who know s and those who s.binary,do not print xprint yprint i ...

《笨辦法學Python》 第8課手記

第八課沒有新內容,作者在常見問題解答裡面說得很清楚,建議每一課的常見問題解答都要仔細閱讀。如下 formatter r r r r print formatter 1,2,3,4 print formatter one two three four print formatter formatter...