我知道这是一个非常糟糕的描述,但我怎样才能让它发挥作用:
class Test1():
def test_p1():
print("This is part 1 of Test1")
def Test2():
return test_p1()
提前致谢!
答案 0 :(得分:5)
嗯,有几种选择。
最基本的是:
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 /库。
User @ 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
,(以及更多 - 以上仅涉及非混淆命名)
答案 1 :(得分:0)
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
会使它成为一种无约束的方法,会导致一些问题。
答案 2 :(得分:-1)
您必须指定包含功能的类。致电Test1.test_p1()
。
(在python3中工作,但不在2.x中,因为有关于绑定和未绑定内容的这种模糊。)
也许你会想要使用大写字母来表示函数的类和小写。
更常见的情况如下:
您有一个定义方法的类:
class Animal:
def bark (self): print ('woof')
然后在其他地方你实例化这个类的对象,然后调用实例的方法:
spike = Animal ()
spike.bark ()