python 类中的函数
Posted
技术标签:
【中文标题】python 类中的函数【英文标题】:function within a class in python 【发布时间】:2022-01-23 22:07:26 【问题描述】:我对 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)
【问题讨论】:
考虑私有方法(带有_
前缀)
我不明白你不明白什么......你已经在你的类中定义了两个函数,那么第三个函数不起作用是什么?跨度>
",因为当我把它放在里面时,我得到了一个错误。" 什么错误? 请不要只说“我遇到错误”。告诉我们*您到底做了什么以及遇到了什么错误,包括堆栈跟踪的完整错误消息”。
Meaning of classmethod and staticmethod for beginner?的可能重复
【参考方案1】:
感谢您的快速回答!
当我需要一个类中的函数而不使用类的实例时,有了这些信息,我会这样做
-
在类中放一个函数
从具有前导 self 的类方法中调用函数
将函数定义为静态方法(没有 self 作为参数),因为函数中没有使用实例
也感谢您在文章的其中一个 cmets 中提供链接,其中解释了背景:
Meaning of @classmethod and @staticmethod for beginner?
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)
【讨论】:
【参考方案2】: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)
【讨论】:
只使用@staticmethod
,参数self
无论如何都不会使用,还要修复缩进
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。【参考方案3】:
类中的方法在编写时需要以 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)
【讨论】:
好吧,现在不需要它是一个实例方法(它可以是一个@staticmethod
,并且可以删除参数self
,因为即使它是一个方法也没有使用它)以上是关于python 类中的函数的主要内容,如果未能解决你的问题,请参考以下文章