我對 Python 中的 OOP 很陌生。
為了避免類方法中的重復代碼,我想在類中引入一個函式,然后從方法中呼叫該函式。從邏輯的角度來看,這些函式應該屬于類,而不應該是全域函式。
我附上了一個小(廢話)的例子。但是該示例僅在函式“SillyName”作為全域函式放置在類之外時才運行。但它應該是班級的一部分。我不知道該怎么做,因為當我把它放在里面時,我收到一個錯誤(NameError: name 'SillyName' is not defined)。你能幫我嗎?
import random
class SillyPerson:
def __init__(self, FirstName, LastName):
self.FirstName = SillyName(FirstName)
self.LastName = SillyName(LastName)
def __str__(self):
return (f"Name is {self.FirstName} {self.LastName}")
def SillyName (name):
""" returns a silly name if a None-Monthy-Python-Name is passed"""
if name in "John Cleese Eric Idle Michael Palin Terry":
return name
else:
return ''.join(random.sample(name,len(name)))
person1 = SillyPerson ("Michael","Moore")
person2 = SillyPerson ("Silvester","Stalone")
print (person1)
print (person2)
uj5u.com熱心網友回復:
類中的方法在撰寫時需要將self作為引數和一個領先的self。被叫的時候。
import random
class SillyPerson:
def __init__(self, FirstName, LastName):
self.FirstName = self.SillyName(FirstName)
self.LastName = self.SillyName(LastName)
def __str__(self):
return (f"Name is {self.FirstName} {self.LastName}")
def SillyName (self, name):
""" returns a silly name if a None-Monthy-Python-Name is passed"""
if name in "John Cleese Eric Idle Michael Palin Terry":
return name
else:
return ''.join(random.sample(name,len(name)))
person1 = SillyPerson ("Michael","Moore")
person2 = SillyPerson ("Silvester","Stalone")
print (person1)
print (person2)
uj5u.com熱心網友回復:
感謝您的快速回答!
有了這些資訊,當我需要一個不使用類實體的類中的函式時,我會
- 在類中放置一個函式
- 從帶有前導 self 的類方法呼叫函式
- 將函式定義為靜態方法(沒有 self 作為引數),因為該實體未在函式內使用
也感謝您提供文章評論之一中的鏈接,其中解釋了背景:
@classmethod 和 @staticmethod 對初學者的意義?
import random
class SillyPerson:
def __init__(self, FirstName, LastName):
self.FirstName = self.SillyName(FirstName)
self.LastName = self.SillyName(LastName)
def __str__(self):
return (f"Name is {self.FirstName} {self.LastName}")
@staticmethod
def SillyName (name):
""" return sillyname if a not Monthy Python name is passed"""
if name in "John Cleese Eric Idle Michael Palin Terry":
return name
else:
return ''.join(random.sample(name,len(name)))
person1 = SillyPerson ("Michael","Moore")
person2 = SillyPerson ("Silvester","Stalone")
print (person1)
print (person2)
uj5u.com熱心網友回復:
import random
class SillyPerson:
def __init__(self, FirstName, LastName):
self.FirstName = self.SillyName(FirstName)
self.LastName = self.SillyName(LastName)
def __str__(self):
return (f"Name is {self.FirstName} {self.LastName}")
def SillyName (self,name):
""" returns a silly name if a None-Monthy-Python-Name is passed"""
if name in "John Cleese Eric Idle Michael Palin Terry":
return name
else:
return ''.join(random.sample(name,len(name)))
person1 = SillyPerson ("Michael","Moore")
person2 = SillyPerson ("Silvester","Stalone")
print (person1)
print (person2)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/392218.html
