classTime:
def__init__(self,hours,minutes,seconds):
self.__hours=hours
self.__minutes=minutes
self.__seconds=seconds
defhours(self):
returnself.__hours
defminutes(self):
returnself.__minutes
defseconds(self):
returnself.__seconds
def__add__(self,other):#定義加法行為
pass
def__sub__(self,other):#定義減法行為
pass
def__eq__(self,other):#定義等於號行為
pass
def__lt__(self,other):#定義小於號行為
pass
寫出大致框架,自行完善後面的四個魔法方法
❷ 利用Python面向對象的編程,求出正方形(4),長方形(3,5)的面積和周長,代碼怎麼寫
Private Sub Command1_Click()
這樣寫(你不是定義數組,而是定義變數):
Dim a As Double
Dim b As Double
a=val(text1.text)
b=val(text2.text)
Text3.Text = Str(a * b)
End Sub
❸ Python編程 面向對象程序設計
面向過程:根據業務邏輯從上到下寫壘代碼
函數式:將某功能代碼封裝到函數中,日後便無需重復編寫,僅調用函數即可
面向對象:對函數進行分類和封裝,讓開發「更快更好更強...」
面向過程編程最易被初學者接受,其往往用一長段代碼來實現指定功能,開發過程中最常見的操作就是粘貼復制,即:將之前實現的代碼塊復制到現需功能處。
❹ python面向對象編程作業
importre
classderivative:
def__init__(self,s):
self.s='+'+sifs[0]notin['+','-']elses
def__analysis__(self):
self.ite=list(re.finditer('[+-]',self.s))
self.items=[xforxinre.split(r'[+-]',self.s)ifx!='']
self.pm=[self.s[i.span()[0]]foriinself.ite]
self.var=[k[k.find('^')-1]forkinself.itemsifk.find('^')>-1][0]
self.ratio=[]
self.power=[]
foriteminself.items:
j=item.find('^')
k=item.find(self.var)
ifj>-1:
self.power.append(int(item[j+1]))
elifk>-1:
self.power.append(1)
else:
self.power.append(0)
foriteminself.items:
k=item.find('*')
ifk>-1:
self.ratio.append(int(item[k-1]))
elifitem.find(self.var)>-1:
self.ratio.append(1)
else:
self.ratio.append(int(item))
self.items=[t[1]fortinsorted(list(zip(self.power,self.items)),reverse=True)]
self.ratio=[t[1]fortinsorted(list(zip(self.power,self.ratio)),reverse=True)]
self.pm=[t[1]fortinsorted(list(zip(self.power,self.pm)),reverse=True)]
self.power.sort(reverse=True)
def__derivative__(self):
power=[x-1ifx>1else0forxinself.power]
ratio=[]
foriinrange(len(self.power)):
ifself.power[i]>1:
ratio.append(self.power[i]*self.ratio[i])
elifself.power[i]==1:
ratio.append(self.ratio[i])
else:
ratio.append(0)
items=[]
foriinrange(len(self.power)):
ifratio[i]==0:
continue
item=self.pm[i]
ifratio[i]>0:
item+=str(ratio[i])
ifpower[i]>0:
item+='*'+self.var
ifpower[i]>1:
item+='^'+str(power[i])
items.append(item)
self.out_s=''.join(items)
ifself.out_s[0]=='+':
self.out_s=self.out_s[1:]
defder(self):
self.__analysis__()
self.__derivative__()
returnself.out_s
s='2*x^3+3*x^2+5*x+1'
d=derivative(s)
print(d.der())
s='-5*x^6-3*x^3+12-4*x^4'
d=derivative(s)
print(d.der())
「不恰當的輸入」不知道要處理什麼級別的錯誤,所以沒搞。自己根據需求去搞吧。
❺ Python面向對象程序設計題,設計一個選課系統,要求如下:
你這完全是一個小軟體拉,想著是沒有人會直接回源碼的吧,且還是面向對象的.用tkinter,還是pyqt等,都沒有說.
❻ python使用面向對象的編程方法完成「超市管理系統」的編寫
是代碼有bug需要調試,還是別的
❼ Python面向對象編程之繼承與多態詳解
Python面向對象編程之繼承與多態詳解
本文實例講述了Python面向對象編程之繼承與多態。分享給大家供大家參考,具體如下:
Python 類的繼承
在OOP(Object Oriented Programming)程序設計中,當我們定義一個class的時候,可以從某個現有的class 繼承,新的class稱為子類(Subclass),而被繼承的class稱為基類、父類或超類(Base class、Super class)。
我們先來定義一個class Person,表示人,定義屬性變數 name 及 sex (姓名和性別);
定義一個方法print_title():當sex是male時,print man;當sex 是female時,print woman。參考如下代碼:
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
def print_title(self):
if self.sex == "male":
print("man")
elif self.sex == "female":
print("woman")
class Child(Person): # Child 繼承 Person
pass
May = Child("May","female")
Peter = Person("Peter","male")
print(May.name,May.sex,Peter.name,Peter.sex) # 子類繼承父類方法及屬性
May.print_title()
Peter.print_title()
而我們編寫 Child 類,完全可以繼承 Person 類(Child 就是 Person);使用 class subclass_name(baseclass_name) 來表示繼承;
繼承有什麼好處?最大的好處是子類獲得了父類的全部屬性及功能。如下 Child 類就可以直接使用父類的 print_title() 方法
實例化Child的時候,子類繼承了父類的構造函數,就需要提供父類Person要求的兩個屬性變數 name 及 sex:
在繼承關系中,如果一個實例的數據類型是某個子類,那它也可以被看做是父類(May 既是 Child 又是 Person)。但是,反過來就不行(Peter 僅是 Person,而不是Child)。
繼承還可以一級一級地繼承下來,就好比從爺爺到爸爸、再到兒子這樣的關系。而任何類,最終都可以追溯到根類object,這些繼承關系看上去就像一顆倒著的樹。比如如下的繼承樹:
isinstance() 及 issubclass()
Python 與其他語言不同點在於,當我們定義一個 class 的時候,我們實際上就定義了一種數據類型。我們定義的數據類型和Python自帶的數據類型,比如str、list、dict沒什麼兩樣。
Python 有兩個判斷繼承的函數:isinstance() 用於檢查實例類型;issubclass() 用於檢查類繼承。參見下方示例:
class Person(object):
pass
class Child(Person): # Child 繼承 Person
pass
May = Child()
Peter = Person()
print(isinstance(May,Child)) # True
print(isinstance(May,Person)) # True
print(isinstance(Peter,Child)) # False
print(isinstance(Peter,Person)) # True
print(issubclass(Child,Person)) # True
Python 類的多態
在說明多態是什麼之前,我們在 Child 類中重寫 print_title() 方法:若為male,print boy;若為female,print girl
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
def print_title(self):
if self.sex == "male":
print("man")
elif self.sex == "female":
print("woman")
class Child(Person): # Child 繼承 Person
def print_title(self):
if self.sex == "male":
print("boy")
elif self.sex == "female":
print("girl")
May = Child("May","female")
Peter = Person("Peter","male")
print(May.name,May.sex,Peter.name,Peter.sex)
May.print_title()
Peter.print_title()
當子類和父類都存在相同的 print_title()方法時,子類的 print_title() 覆蓋了父類的 print_title(),在代碼運行時,會調用子類的 print_title()
這樣,我們就獲得了繼承的另一個好處:多態。
多態的好處就是,當我們需要傳入更多的子類,例如新增 Teenagers、Grownups 等時,我們只需要繼承 Person 類型就可以了,而print_title()方法既可以直不重寫(即使用Person的),也可以重寫一個特有的。這就是多態的意思。調用方只管調用,不管細節,而當我們新增一種Person的子類時,只要確保新方法編寫正確,而不用管原來的代碼。這就是著名的「開閉」原則:
對擴展開放(Open for extension):允許子類重寫方法函數
對修改封閉(Closed for modification):不重寫,直接繼承父類方法函數
子類重寫構造函數
子類可以沒有構造函數,表示同父類構造一致;子類也可重寫構造函數;現在,我們需要在子類 Child 中新增兩個屬性變數:mother 和 father,我們可以構造如下(建議子類調用父類的構造方法,參見後續代碼):
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
class Child(Person): # Child 繼承 Person
def __init__(self,name,sex,mother,father):
self.name = name
self.sex = sex
self.mother = mother
self.father = father
May = Child("May","female","April","June")
print(May.name,May.sex,May.mother,May.father)
若父類構造函數包含很多屬性,子類僅需新增1、2個,會有不少冗餘的代碼,這邊,子類可對父類的構造方法進行調用,參考如下:
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
class Child(Person): # Child 繼承 Person
def __init__(self,name,sex,mother,father):
Person.__init__(self,name,sex) # 子類對父類的構造方法的調用
self.mother = mother
self.father = father
May = Child("May","female","April","June")
print(May.name,May.sex,May.mother,May.father)
多重繼承
多重繼承的概念應該比較好理解,比如現在需要新建一個類 baby 繼承 Child , 可繼承父類及父類上層類的屬性及方法,優先使用層類近的方法,代碼參考如下:
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
def print_title(self):
if self.sex == "male":
print("man")
elif self.sex == "female":
print("woman")
class Child(Person):
pass
class Baby(Child):
pass
May = Baby("May","female") # 繼承上上層父類的屬性
print(May.name,May.sex)
May.print_title() # 可使用上上層父類的方法
class Child(Person):
def print_title(self):
if self.sex == "male":
print("boy")
elif self.sex == "female":
print("girl")
class Baby(Child):
pass
May = Baby("May","female")
May.print_title() # 優先使用上層類的方法
❽ python面向對象編程題
父類省份,子類地級城市繼承父類
地級城市屬性:姓名、商品數量、基金數目
地級城市方法:買,對應功能1;賣,對應功能2
主方法中包含變數:自己(qinshihuang),周邊市供應商(liubang),買家(hanxin),利潤期望
隨機變數是商品銷售數
初始狀態是先從供應商買走4件商品,然後關鍵在於被退回的商品是否算作售出(涉及到公式的內容)
❾ python面向對象編程中的f.init()什麼意思,為什麼要加這一個
f.init()加在中間是為了類Filter定義一個屬性blocked並初始化,因為它定義了類的屬性blocked,而類Filter的函數filter中要用到這個屬性,所以不加f.init()會報錯.
同樣的s.init(),SPAMFilter子類重寫了Filter父類的init函數,並且重新定義了屬性blocked,而子類SPAMFilter繼承的父類Filter的函數filter中用到了這個屬性,所以不加s.init()也會報錯.
完整的Python程序如下
class Filter:
def init(self):
self.blocked=[]
def filter(self,sequence):
return [x for x in sequence if x not in self.blocked]
class SPAMFilter(Filter):
def init(self):
self.blocked=['SPAM']
f=Filter()
f.init()
print(f.filter([1,2,3]))
s=SPAMFilter()
s.init()
print(s.filter(['SPAM','SPAM','SPAM','SPAM','eggs','bacon','SPAM']))
源代碼(注意源代碼的縮進)
❿ 一個python編程題目——面向對象的
不一定的,以後每個月越來越多兔子,沒有準確數目