Python OOP与实例变量的使用有关

时间:2017-09-28 14:40:00

标签: python-2.7 python-3.x class oop instance-variables

class idk():
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def t(self):
        self.t = self.name + self.age
    def qrt(self):
        print(len(self.t))                             

abc = idk('abc','19')                 
abc.qrt()

abc.name= 'aduhd'            
abc.qrt()

当我运行此代码时,我收到以下错误

Traceback (most recent call last):
    File "C:/Users/Prajval/Desktop/test.py", line 11, in <module>
        abc.qrt()
    File "C:/Users/Prajval/Desktop/test.py", line 8, in qrt
        print(len(self.t))
TypeError: object of type 'instancemethod' has no len()

以下错误意味着什么:

  

TypeError:类型为&#39; instancemethod&#39;的对象没有len()

2 个答案:

答案 0 :(得分:1)

您忘记调用方法,该方法已将同名t作为实例变量。

def qrt(self):
    print(len(self.t()))

通过命名方法与正在使用fire的实例变量相同。第一次调用t方法时,它将表现为方法,并作为首次调用的字符串。不要为自己挖一个漏洞。

答案 1 :(得分:1)

最终代码,

class idk():
    def __init__(self,name,age):
        self.name = name
        self.age = age
        
    def t(self):
        self.t1 = self.name + self.age
        return self. t1 # was missing 
        
    def qrt(self):
        print(len(self.t()))                             

abc = idk('abc','19')                 
abc.qrt()

abc.name= 'aduhd'            
abc.qrt()
5
7

[Program finished]