在Pycharm的Python中,是否有一种方法可以指示我不希望在自动完成窗口中向用户显示特定类的类型提示?
我有一个类Result
,它可能包含一个字符串,例如1+2
,或者另一个类Exercise
的示例。Exercise
类包含2个数字,可以从它们生成一个练习字符串。Result
类使用Pydantic (另请参见脚注) 来验证输入是str还是Exercise
类型,因此我必须声明一个类型的Union:
exercise: Union[str, Exercise]
最后,我希望我的代码的未来用户能够获得自动完成建议,即只将属性exercise
视为str
,而忽略Exercise
类型。
在屏幕截图中,您可以看到自动完成窗口中有针对str
和Exercise
类型的建议。
所以我的问题是:在Pycharm的Python中,是否有一种方法可以指示我不希望在自动完成窗口中向用户显示特定类的类型提示?
脚注
- 在这个例子中,我使用Pydantic定义
Exercise(BaseModel)
来表达我的观点,但是您可以使用Exercise
的其他定义。
代码
from typing import Union
from pydantic import BaseModel
#
# class Exercise:
# def __init__(self, num1: int, num2: int):
# self.num1: int = num1
# self.num2: int = num2
#
# def convert_to_str(self) -> str:
# return f'{self.num1} + {self.num2}'
class Exercise(BaseModel):
num1: int
num2: int
def convert_to_str(self) -> str:
return f'{self.num1} + {self.num2}'
class Result(BaseModel):
exercise: Union[str, Exercise]
def convert_to_str(self):
if isinstance(self.exercise, Exercise):
self.exercise = self.exercise.convert_to_str()
if __name__ == '__main__':
exercise_example: Exercise = Exercise(num1=1, num2=2)
result1: Result = Result(exercise=exercise_example)
print(result1.exercise)
result1.convert_to_str()
print(result1.exercise)
print(result1.exercise.split('+'))
1条答案
按热度按时间8yoxcaq71#
您展示的示例在我看来很奇怪,因为可以认为避免使用
str
而只使用Exercise
可以提供更好的面向对象方法。假设您实际上需要一个
exercise: str
字段,但又希望通过将Exercise
示例转换为str
来初始化该字段,则可以使用@validator
:输出量:
该验证程序只会将
Exercise
示例转换为str
。其他类的示例将保持不变。pre=True
将导致在其他验证之前调用此验证程序。exercise
字段将是str
而不是Union
,并且任何IDE都只会显示str
的自动完成建议。