2017-12-27 3 views
0

(코드의 짧은 버전)PyCharm F-문자열 사용 (확인되지 ​​않은 속성 참조 클래스 '__name'...)

class Animal: 
    __name = "" 
    __gender = "unknown" 
    __height = 0 
    __weight = 0 
    __hungry = False 

    def __init__(self, name, gender, height, weight): 
     self.__name, self.__gender, self.__height, self.__weight = name, gender, height, weight 

    def toString(self): 
     return f'{self.__name} is a {self.__gender}, {self.__height} m tall and weights {self.__weight} kg.' 

PyCharm 나 경고 : 해결되지 않은 속성 참조 '__name를' 'Animal'클래스의 경우

코드는 의도 한대로 작동합니다. 왜이 경고가 나타 납니까?

f-strings는 나를위한 str.format 및 they are also faster의 더 깨끗한 버전처럼 보입니다. PS. 내가 파이썬에 초보자이야으로, 그리고 수행해야합니다 수있는 모든 세련된 오류 또는 무엇을 가져 주시기 바랍니다 더 나은 :)

파이썬 버전 : 3.6.4 PyCharm 커뮤니티 버전 : 2017년 3월 1일

Picture of the code and the error

+0

아, 그리고 재미있는 점은 PyCharm 자체가 나에게 ''f-string 리터럴로의 변환 ''을 이전 코드로 제공한다는 것입니다 ... – Estonian

+1

PyCharm에서 버그를 발견했습니다. 속성 이름에서 이중 언더 스코어를 사용하면 이름이 엉망이 될 수 있습니다. 다른 클래스에서이 클래스에 액세스하려는 경우 변형 된 이름을 사용해야합니다. (실제로이 경우 잘못된 것입니다 :'Animal'의 하위 클래스는 자신의 이름, 성별, 신장 및 체중 속성을 필요로하지 않습니다.) – kindall

+0

신고해야합니까? – Estonian

답변

0

약 1 년 전부터 this post이고 또한 this입니다. 그것은 PyCharm에 문제가 될 수있는 것 같습니다.

그러나 f 문자열 내에서 이중 밑줄을 제거하면 더 이상 불평하지 않습니다.

dunder 접두사가 붙은 속성으로 ''.format()을 호출하면 오류 또는 경고가 발생하지 않는 것으로 보입니다.

@kindall은 위에 명시된대로 prefixing with the double underscore은 이름 mangling을 호출합니다.

class Animal: 
    __X = 'y' 

    def __init__(self, name="", gender="", height=0, weight=0, hungry=False): 
     self.name = name 
     self.gender = gender 
     self.height = height 
     self.weight = weight 
     self.hungry = hungry 

    def to_string(self): 
     return f'{self.name} is a {self.gender}, {self.height} m tall and weights {self.weight} kg.' 

    def to_string_format(self): 
     return '{}'.format(self.__X) 

they 또한이 문제와 관련된 버그에 대해 알고있는 것 같습니다. 나는 그것을 가져올 것이다. 더 많은 정보를 얻는 것이 좋을 것입니다.

관련 문제