繁体   English   中英

类型错误:'str' object 不可调用 oop

[英]TypeError: 'str' object is not callable oop

我是 oop 和 python 的新手。 为什么我会收到此错误? 它不应该打印汤姆和 12 吗?

  class Dog:
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
    
        def name(self):
            return self.name
    
        def age(self):
            return self.age
    
    
  dog = Dog("tom", 12)
    
  print(dog.name())
  
  print(dog.age())

实例属性优先于 class 属性,当每个属性都存在并且它们具有相同名称时。 如果您要拥有一个返回属性值的方法,通常的约定是通过在名称前加上下划线,使实例属性的名称成为方法名称的“私有”版本。

class Dog:
    def __init__(self, name, age):
        self._name = name
        self._age = age

    def name(self):
        return self._name

    def age(self):
        return self._age

但是,除非您有充分的理由将属性隐藏在 getter 后面,否则只需将该属性作为公共接口的一部分公开即可。

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age


d = Dog("tom", 12)
print(dog.name)

如果您稍后决定将属性隐藏在 getter 和/或 setter 后面,则可以使用属性来执行此操作,而无需更改公共接口。

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, v):
        self._name = v


d = Dog("tom", 12)
print(dog.name)  # Works the same as before

name是一个变量, name也是一个 function。

因此这个错误。

只需print(self.name)

你必须创建 class 并像这样更改函数的名称

class Dog:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def Name(self):
        return self.name

    def age(self):
        return self.age


dog = Dog("tom", 12)

print(dog.name())

print(dog.age())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM