簡體   English   中英

python 中的 class 中的 function

[英]function within a class in python

我對 Python 中的 OOP 很陌生。

為了避免 class 方法中的重復代碼,我想在 class 中引入 function ,然后從方法中調用它。 從邏輯的角度來看,這些 function 應該屬於 class 並且不應該是全局 function。

我附上了一個小(廢話)示例。 但該示例僅在 function“SillyName”作為全局 function 放置在 class 之外時運行。 但它應該是 class 的一部分。 我不知道該怎么做,因為當我把它放在里面時,我收到一個錯誤(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)

class 中的方法在寫入時需要將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)

感謝您的快速回答!

有了這些信息,當我需要 class 中的 function 時,它沒有使用 class 的實例

  1. 在 class 里面放一個 function
  2. 使用領先的 self 從 class 方法調用 function
  3. 將 function 定義為 static 方法(沒有 self 作為參數),因為在 function 中未使用該實例

還感謝您在文章的評論之一中提供鏈接,其中解釋了背景:

@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)
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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM