繁体   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