'str'对象不可调用和sep运算符

时间:2018-02-14 00:21:15

标签: python

编译器说TypeError:'str'对象在尝试执行程序时不可调用。这是什么意思,我该如何解决这个问题?此外,我正在尝试使用sep,但它也会返回错误。代码将随之而来。感谢您提出的所有建议

class dog:

    def __init__(self, name, breed, owner):
        self.name = name
        self.breed = breed
        self.owner = owner

    def bark(self):
        print(self.name, "barks.")

    def breed(self):
        print(self.name, "is a", self.breed)

    def owner(self):
        print(self.name, "'s owner is ", self.owner, sep='')

d1 = dog("Tommy", "Terrier", "Mary")
d1.bark()
d1.breed()
d1.owner()


d2 = dog("Johnny", "Bloodhound", "Alex")
d2.bark()
d2.breed()
d2.owner()

编辑:谢谢Simon的解决方案。 更新的代码:

class dog:

def __init__(self, name, breed, owner):
    self.name = name
    self.breed = breed
    self.owner = owner

def speak(self):
    print(self.name, "barks.")

def identify(self):
    print(self.name, "is a", self.breed)

def relation(self):
    print(self.name, "belongs to", self.owner)

d1 = dog("Tommy", "Terrier", "Mary")
d1.speak()
d1.identify()
d1.relation()


d2 = dog("Johnny", "Bloodhound", "Alex")
d2.speak()
d2.identify()
d2.relation()

这是按预期工作,但它打印很奇怪。这是我得到的输出:

('Tommy', 'barks.')
('Tommy', 'is a', 'Terrier')
('Tommy', 'belongs to', 'Mary')
('Johnny', 'barks.')
('Johnny', 'is a', 'Bloodhound')
('Johnny', 'belongs to', 'Alex')

我知道如何剥离括号等吗?

1 个答案:

答案 0 :(得分:0)

发生此错误是因为您调用的变量与函数相同。要解决此问题,您只需更改函数或变量的名称即可。例如:

class dog:

    def __init__(self, name, breed, owner):
        self.name = name
        self.breed = breed
        self.owner = owner

    def bark(self):
        print(self.name, "barks.")

    def breeds(self):
        print(self.name, "is a", self.breed)

    def owners(self):
        print(self.name, "'s owner is ", self.owner, sep='')

d1 = dog("Tommy", "Terrier", "Mary")
d1.bark()
d1.breeds()
d1.owners()


d2 = dog("Johnny", "Bloodhound", "Alex")
d2.bark()
d2.breeds()
d2.owners()

在您的代码中,Python认为您调用变量(self.breedself.owner)而不是函数(self.breedself.owners),因为两者都以相同的方式定义。它无法区分两者,只是取得它找到的第一个(即变量)。这会返回错误。

您可以用以下简单的术语重现可调用错误:

breed = "BloodHound"
breed()

这正是你上面所做的。