我知道这是一个非常糟糕的描述,但我怎样才能让它工作:
class Test1():
def test_p1():
print("This is part 1 of Test1")
def Test2():
return test_p1()
提前致谢!
好吧,有几种选择。
最基本的是:
class Test1():
def test_p1(self):
print("This is part 1 of Test1")
def Test2():
return Test1().test_p1()
但是,您应该在有新实例有意义时使用它(取决于您的 API)。
class Test1():
@classmethod
def test_p1(cls):
print("This is part 1 of Test1")
def Test2():
return Test1.test_p1()
class Test1():
@staticmethod
def test_p1():
print("This is part 1 of Test1")
def Test2():
return Test1.test_p1()
在某些情况下(也许你的情况也是如此,我们不知道)实际利用继承是有意义的:创建一个将继承自Test1
. 这样你就可以覆盖它的一部分并引用父方法。例子:
class Test1():
def test_p1(self):
print("This is part 1 of Test1")
class SomeOtherClass(Test1):
def test2(self):
return super(SomeOtherClass, self).test_p1()
然后像这样使用它:
my_instance = SomeOtherClass()
result = my_instance.test2()
但同样,这实际上取决于您的 API / 库。
用户@user2357112 正确地指出,模块级功能可以是更好(更简单)的想法:
def test_p1():
print("This is part 1 of Test1")
def Test2():
return test_p1()
为避免混淆,由于 Python 确实是动态的,您应该向开发人员提供有关他们正在使用什么的“提示”,并且通常遵循 PEP8 中定义的编码风格:
all_lower_case
,all_lower_case
,CamelCase
(同样适用于返回类实例的类工厂函数),ALL_UPPER_CASE
,all_lower_case
,(还有更多 - 以上只是关于非混淆命名)
Tadeck 在我打字时给出了详细的答案,但这是我相信你正在努力完成的最初解决方案。我添加我的输入只是因为我是 Python 新手,我认为初学者的观点可能对 OP 有益。
class Test1():
def test_p1(self):
print "This is part 1 of Test1"
def Test2():
myTest = Test1()
return myTest.test_p1()
Test2()
在您的原始代码中,您尝试调用该test_p1
方法而不实例化Test1
该类。所以我先这样做了,myTest = Test1()
然后使用我新创建的对象调用该test_p1()
方法。myTest
另外,我self
在方法中添加了参数列表test_p1
。我不完全明白为什么,但显然缺乏self
使它成为一种未绑定的方法,这会导致一些问题。
您必须指定包含函数的类。打电话Test1.test_p1()
。
(在 python3 中有效,但在 2.x 中无效,因为关于绑定和未绑定的事物存在这种模糊性。)
也许您想对类使用大写字母,对函数使用小写字母。
更常见的情况如下:
您有一个定义方法的类:
class Animal:
def bark (self): print ('woof')
然后在其他地方实例化这个类的一个对象,然后调用实例的方法:
spike = Animal ()
spike.bark ()