Python 属性错误:';用户';对象没有属性';setFirstName';

Python 属性错误:';用户';对象没有属性';setFirstName';,python,Python,我正在学习python。我得到了这个错误p1.setFirstName(“john”) AttributeError:“User”对象没有属性“setFirstName”。我没有得到我犯错误的地方。请帮助我解决此错误。我是lerning setter and getter方法。我调用了下面的方法,但它没有显示其属性。因此我不明白它的含义。 多谢各位 User.py import mysql.connector class User: def __init__(self): de

我正在学习python。我得到了这个错误p1.setFirstName(“john”) AttributeError:“User”对象没有属性“setFirstName”。我没有得到我犯错误的地方。请帮助我解决此错误。我是lerning setter and getter方法。我调用了下面的方法,但它没有显示其属性。因此我不明白它的含义。 多谢各位

User.py

import mysql.connector
class User:
  def __init__(self):

      def setFirstName(self,new_firstname):
          self._FirstName = new_firstname

      def setLastName(self,new_lastname):
          self._LastName = new_lastname

      def setBirthdate(self,new_birthdate):
          self._Birthdate = new_birthdate

      def setMartialStatus(self,new_martialstatus):
          self._MartialStatus = new_martialstatus

      def setGender(self,new_gender):
          self._Gender = new_gender

      def setHeight(self,new_height):
          self._Height = new_height

      def setValidIdType(self,new_valididtype):
          self._ValidIdType = new_valididtype

      def setValidIdNumber(self,new_valididnumber):
          self._ValidIdNumber = new_valididnumber

      def setNationality(self,new_nationality):
          self._Nationality = new_nationality

      def getFirstName():
          return self._FirstName

      def getLastName():
          return self._LastName

      def getBirthdate():
          return self._Birthdate

      def getMartialStatus():
          return self._MartialStatus

      def getGender():
          return self._Gender

      def getHeight():
          return self._Height

      def getValidIdType():
          return self._ValidIdType

      def getValidIdNumber():
          return self._ValidIdNumber

      def getNationality():
          return self._Nationality


p1=User()
p1.setFirstName("john")
p1.setLastName("abrahum")
p1.setBirthdate("1/1/1996")
p1.setMartialStatus("married")
p1.setGender("male")
p1.setHeight("5ft2inhces")
p1.setValidIdType("pancard")
p1.setValidIdNumber("123456")
p1.setNationality("Indian")

name=p1.getFirstName()
print(name)

1-所有方法都在
\uuuuu init\uuuu

2-getter必须将
self
作为参数

class User:

    def setFirstName(self, new_firstname):
        self._FirstName = new_firstname

    def setLastName(self, new_lastname):
        self._LastName = new_lastname

    def setBirthdate(self, new_birthdate):
        self._Birthdate = new_birthdate

    def setMartialStatus(self, new_martialstatus):
        self._MartialStatus = new_martialstatus

    def setGender(self, new_gender):
        self._Gender = new_gender

    def setHeight(self, new_height):
        self._Height = new_height

    def setValidIdType(self, new_valididtype):
        self._ValidIdType = new_valididtype

    def setValidIdNumber(self, new_valididnumber):
        self._ValidIdNumber = new_valididnumber

    def setNationality(self, new_nationality):
        self._Nationality = new_nationality

    def getFirstName(self):
        return self._FirstName

    def getLastName(self):
        return self._LastName

    def getBirthdate(self):
        return self._Birthdate

    def getMartialStatus(self):
        return self._MartialStatus

    def getGender(self):
        return self._Gender

    def getHeight(self):
        return self._Height

    def getValidIdType(self):
        return self._ValidIdType

    def getValidIdNumber(self):
        return self._ValidIdNumber

    def getNationality(self):
        return self._Nationality


if __name__ == '__main__':
    p1 = User()
    p1.setFirstName("john")
    p1.setLastName("abrahum")
    p1.setBirthdate("1/1/1996")
    p1.setMartialStatus("married")
    p1.setGender("male")
    p1.setHeight("5ft2inhces")
    p1.setValidIdType("pancard")
    p1.setValidIdNumber("123456")
    p1.setNationality("Indian")

    name = p1.getFirstName()
    print(name)
但是,在python中,您可以用以下内容替换所有这些getter和setter:

class User:

    def __init__(self):

        self.first_name = None
        self.last_name = None
        self.birth_date = None
        self.marital_status = None
        self.gender = None
        self.height = None
        self.valid_id_tyoe = None
        self.valid_id_number = None
        self.nationality = None


if __name__ == '__main__':
    p1 = User()
    p1.first_name = "john"
    p1.last_name = "abrahum"
    p1.birth_date = "1/1/1996"
    p1.marital_status = "married"
    p1.gender = "male"
    p1.height = "5ft2inhces"
    p1.valid_id_type = "pancard"
    p1.valid_id_number = "123456"

    name = p1.first_name
    print(name)

以较小的例子为例

class Dog:
    def __init__(self):
        def bark():
            print("Woof!")
这是有效的Python,工作正常,但不是您想要的。 函数
bark
仅在
\uuuuu init\uuuu
函数的范围内,您可以将该函数视为类
Dog
的构造函数。为了让狗吠叫,你需要这样做

class Dog:
    def __init__(self):
        def bark():
            print("Woof!")
        bark()
对你来说,我想你是有意的

class User:
    def __init__(self):
        # set this first in case the user
        # tries to `get` before setting
        self.first_name = ''

    def set_first_name(self, name):
        self.first_name = name

    def get_first_name(self):
        return self.first_name

注意,python的惯例是使用snake-case而不是camel-case。如果你关心该领域的最佳实践,我也会看这篇文章

您是从另一种语言来到python的吗?根据缩进,所有方法都是在
\uuu init\uuu
中定义的。所以它们不能从实例级别访问是的,我是从java和php访问python的。谢谢你的帮助,但是如果我想按照前面提到的代码编写,那么我需要定义_init_uu之外的所有方法,如果我访问了这些方法,那么我将如何访问它?