这应该相对简单,但我只是遗漏了一些东西。我正在尝试使用包含在类中的另一个模块的函数。当没有涉及课程时,我可以轻松完成。
# a.py
import b
b.name()
-
# b.py
def name():
print "What is your name?"
class details(object):
def age():
print "What is your age?"
当我跑步时,我得到
的预期结果你叫什么名字?
然而,当我尝试从另一个模块访问“def age()”时,它一直给我带来麻烦。
到目前为止,我尝试了一些......
# c.py
import b
b.details.age()
= TypeError:必须调用未绑定方法age(),并将详细信息实例作为第一个参数(没有任何内容)
# c.py
from b import details
details.age()
= TypeError:必须调用未绑定方法age(),并将详细信息实例作为第一个参数(没有任何内容)
# c.py
from b import details
b.details(age)
= NameError:名称'b'未定义
我也尝试过其他一些但是太多而不能合理地发布。我究竟做错了什么?这样做的语法是什么?当它包含在另一个模块的类中时,它甚至可以执行一个函数吗?
提前致谢
编辑:按照Mike Graham的建议将所有标签修复为空格
答案 0 :(得分:1)
Python中所有类方法的第一个参数是对当前对象的引用(通常称为self)。但是,也就是说,您似乎尝试将其用作静态方法而不是实例方法,因此您可能想要使用the @staticmethod
decorator:
class Details: # class names in Python should generally be CamelCased.
# please note the comments below
@staticmethod
def age():
print 'What is your age?'
或者,如果您真的希望它是一个实例方法,那么您需要添加self
并更改您引用它的方式:
class Details:
def age(self):
print 'What is your age?'
# c.py
from b import Details
#you must create an instance of the class before you can call methods on it.
d = Details()
d.age()
正如评论中所指出的,@staticmethod
很少有真正的用例(例如,使用模块组织代码通常会更好)。您经常会遇到@classmethod
作为替代方案。但请注意,用@classmethod
修饰的方法将当前类作为第一个参数引用。 This question addresses the major differences.