Python 访问实例变量,AttributeError

Python 访问实例变量,AttributeError,python,pycharm,instance,instance-variables,Python,Pycharm,Instance,Instance Variables,我有一些关于Python中实例变量的相关问题。我将把第一个(主要)问题放在代码本身的注释中,然后问相关的问题: class Employee: def __init__(self, first, last, pay): self.first = first self.last = last self.email = first + '.' + last + '@email.com' self.pay = pay

我有一些关于Python中实例变量的相关问题。我将把第一个(主要)问题放在代码本身的注释中,然后问相关的问题:

class Employee:

    def __init__(self, first, last, pay):
        self.first = first
        self.last = last
        self.email = first + '.' + last + '@email.com'
        self.pay = pay

    def fullname(self):
        return '{} {}'.format(self.first, self.last)

    @classmethod
    def from_string(cls, emp_str):
        first, last, pay = emp_str.split(',')
        return cls(first, last, pay)

emp_str_1 = 'John,Doe,70000'

emp_1 = Employee.from_string(emp_str_1)

print(emp_1.fullname(), emp_1.pay, emp_1.email) #<--- This works

print(emp_1.fullname().pay.email) #<--- Why can't I do this??
class员工:
定义初始(自我、第一、最后、支付):
self.first=第一
self.last=last
self.email=first+'.+last+'@email.com'
自我支付
def全名(自我):
返回“{}{}”。格式(self.first,self.last)
@类方法
来自_字符串的定义(cls、emp_str):
首先,最后,pay=emp_str.split(','))
返回cls(第一次、最后一次、付款)
emp_str_1=‘约翰,多伊,70000’
emp_1=Employee.from_字符串(emp_str_1)

打印(emp_1.fullname()、emp_1.pay、emp_1.email)#在Python中,可以使用+

print(emp_1.fullname(), emp_1.pay, emp_1.email) # THIS WILL WORK,
因为你只是在传递字符串。[与此问题无关,仅提供附加信息:如果要打印整数或布尔值,则除非使用str()显式键入,否则打印将失败。)

因为“.”运算符用于访问实例方法和变量

如果使用emp_1.fullname(),它将调用fullname()方法,该方法将返回一些字符串

但是如果使用emp_1.fullname().pay-emp_1.fullname()是对该方法的调用,而fullname()方法没有任何类似“pay”的变量。因此正确的使用方法是emp_1.pay

我建议使用打印式

print("Name :{}:, Pay :{}: , Mail :{}:".format(emp_1.fullname(), emp_1.pay, emp_1.email)) # BECAUSE format will typecast in case if your pay is INTEGER OR FLOAT

在Python中,可以使用+

print(emp_1.fullname(), emp_1.pay, emp_1.email) # THIS WILL WORK,
因为您只是在传递字符串。[与此问题无关,只是附加信息:如果您要打印整数或布尔值,那么它将失败,除非您使用str()显式地对其进行类型转换。)

因为“.”运算符用于访问实例方法和变量

如果使用emp_1.fullname(),它将调用fullname()方法,该方法将返回一些字符串

但是如果使用emp_1.fullname().pay-emp_1.fullname()是对该方法的调用,而fullname()方法没有任何类似“pay”的变量。因此正确的使用方法是emp_1.pay

我建议使用打印式

print("Name :{}:, Pay :{}: , Mail :{}:".format(emp_1.fullname(), emp_1.pay, emp_1.email)) # BECAUSE format will typecast in case if your pay is INTEGER OR FLOAT

如果您尝试执行
“abc”.email
您希望它会起作用吗?
emp1.fullname().pay
是一个字符串,那么您可以尝试获取字符串的.email属性。Pycharm不能告诉您该属性已损坏,因为它不能推断
.pay
的类型。它不是PHP。不能使用点(.)连接字符串。请使用加号(+)签名将字符串连接在一起。哦,对了,它认为我的意思是:emp1.fullname()+fullname.pay不是emp1.fullname()+emp1.pay,这很有意义,谢谢大家!你们使用的是什么PyCharm版本?警告显示在PyCharm 2018.1.4和2018.2 EAP中。如果你们试图做
“abc”。email
你们希望这样做吗?
emp1.fullname().pay
是一个字符串,因此您可以尝试获取字符串的.email属性。Pycharm无法告诉您此属性已损坏,因为它无法推断
的类型。pay
不是PHP。您不能使用点(.)连接字符串。使用加号(+)将字符串连接在一起。哦,对了,它认为我的意思是:emp1.fullname()+fullname.pay而不是emp1.fullname()+emp1.pay,这很有意义,谢谢各位!你们使用的是什么PyCharm版本?警告显示在PyCharm 2018.1.4和2018.2 EAP中。