我有2个脚本,第1个是All_Methods,另一个是All_Testcases,因为我正在使用unittest框架,所以我们开始吧。
All_Methods就像:
class All_Services():
def abc(self):
x =1
def bca(self):
print "My Name is Taimoor"
self.abc()
def cba(self):
self.bca()
在另一个脚本All_TestCases上是这样的:
from All_Methods import All_Services as service
class All_TestCases(unittest.TestCase):
def test_1_running_method(self)
service.cba(self)
异常显示为:
AttributeError: 'All_TestCases' object has no attribute 'bca'
请有人告诉我,我在这里想念的是什么? 谢谢。
答案 0 :(得分:1)
该示例中的代码有很多错误,但请放一旁。
该错误是由于将class A
的实例作为self
参数传递给class B
的(非静态)方法引起的。
Python将尝试在class A
的实例上调用此方法,从而导致缺少属性错误。
这是问题的简化示例:
class A:
def is_ham(self):
# Python secretly does `self.is_ham()` here,
# because `self` is the current instance of Class A.
# Unless you explicitly pass `self` when calling the method.
return True
class B:
def is_it_ham(self):
# Note, `self` is an instance of class B here.
return A.is_ham(self)
spam = B()
spam.is_it_ham()
答案 1 :(得分:0)
当您将自身传递给在类上调用的方法时,您不会以通常的方式使用类。常见的做法是在类的实例上调用方法并隐式获取self参数。
调用batch
时,self是Method.running_query_Athena(self)
的实例,没有方法All_TestCases
。
您是说connecting_Athena
源自All_TestCases
吗?
为什么All_Methods
完全是一堂课?
答案 2 :(得分:0)
尝试以下操作:
class MyClass:
def my_instance_method(self):
return True
@classmethod
def my_class_method(cls):
return True
@staticmethod
def my_static_method():
return True
这行不通:
>> MyClass.my_instance_method()
TypeError: my_instance_method() missing 1 required positional argument: 'self'
但是这些将被绑定,因为它们没有绑定到正在创建的类实例上。
MyClass.my_class_method()
MyClass.my_static_method()
实例方法要求您实例化Class;您使用的含义:
MyClass().my_instance_method()
由于您似乎想在类实例上设置response_id
;使用表示类实例的self
参数来获取response_id
。 -我建议您使用实例方法并实例化该类,如上所示(注意,类名后的()
)
请务必解决您的格式问题。