__init__python中函数的正确类型注释是什么?
class MyClass:
...
Run Code Online (Sandbox Code Playgroud)
以下哪项更有意义?
def __init__(self):
# type: (None) -> None
def __init__(self):
# type: (MyClass) -> MyClass
def __init__(self):
# type: (None) -> MyClass
Run Code Online (Sandbox Code Playgroud)
因为我们通常会实例化为myclass = MyClass(),但__init__函数本身没有返回值.
每当我尝试访问Series或DataFrame的非方法属性(例如columns或loc)时,IntelliJ都会抛出一个"未解析的引用"警告,它不会使我的代码崩溃,但是看起来很烦人.我宁愿不要禁用这个检查,我想避免使用抑制来加密我的代码.
我已经为调试器设置了"收集代码洞察的运行时类型信息"选项,但这不起作用.我也尝试在Inspections选项卡的"忽略引用"列表中添加忽略引用,但我尝试的任何内容似乎都无效.
我得到的警告将是这样的Cannot find reference loc in 'Series | Series'.
我有一个看起来像这样的课程:
class CareerTransition(object):
def __init__(self, title_from: str, title_to: str)->None:
self.title_from = title_from # type: str
self.title_to = title_to # type: str
@staticmethod
def from_file(fname: str, verbose : bool = False)->List[CareerTransition]:
#Do some stuff
pass
Run Code Online (Sandbox Code Playgroud)
当我尝试实例化该类时,我收到此错误:
Traceback (most recent call last):
File "/Users/simon.hughes/GitHub/analytics-py-careerpathing/careerpathing/data/employment_history.py", line 8, in <module>
class CareerTransition(object):
File "/Users/simon.hughes/GitHub/analytics-py-careerpathing/careerpathing/data/employment_history.py", line 17, in CareerTransition
def from_file(fname: str, verbose : bool = False)->List[CareerTransition]:
NameError: name 'CareerTransition' is not defined
Run Code Online (Sandbox Code Playgroud)
是否不可能使用类型注释来引用引用当前类的泛型类型?澄清(因为它可能不是很明显)它正在抛出该错误,因为该类尚未定义.有没有解决的办法?
python 3.5 的新功能之一是从该项目中获得启发的类型提示。
键入:PEP 484 –键入提示。
我想测试它,但是它没有按预期工作。
import typing
class BankAccount:
def __init__(self, initial_balance: int = 0) -> None:
self.balance = initial_balance
def deposit(self, amount: int) -> None:
self.balance += amount
def withdraw(self, amount: int) -> None:
self.balance -= amount
def overdrawn(self) -> bool:
return str(self.balance < 0)
my_account = BankAccount(15)
my_account.withdraw(5)
print(type(my_account.overdrawn()))
Run Code Online (Sandbox Code Playgroud)
结果是:
<class 'str'>
Run Code Online (Sandbox Code Playgroud)
我期待一个错误,因为我期望布尔作为回报。我在python:3.5(docker)和local上测试了它。我是否想念一些东西以使其起作用?这种键入是否在运行时不起作用(例如python app.py)?
我刚刚偶然发现了python解释器的奇怪行为.错误印刷,我在声明变量时放置了冒号而不是等号.
Python 3.6.1 (v3.6.1:69c0db5050, Mar 21 2017, 01:21:04)
>>> foo: 'bar'
>>>
Run Code Online (Sandbox Code Playgroud)
之前没有声明变量foo.令人惊讶的是,Python没有抛出异常,但也没有做任何其他事情.
这是某种新语法吗?它的目的是什么?
PS Python 2.7按预期抛出异常:
Python 2.7.10 (default, Aug 17 2018, 17:41:52)
>>> foo: 'bar'
File "<stdin>", line 1
foo: 'bar'
^
SyntaxError: invalid syntax
>>>
Run Code Online (Sandbox Code Playgroud) 简单地说,在 Python中重载构造函数的最干净或最常用的方式是什么?
我有 C# 方面的经验并且是 Python 新手,所以我仍在学习 Python 中的最佳实践。
C# 有一种非常干净的构造函数重载方式,因此我可以处理在初始化时作为参数传递的不同数据类型。我已经看到很多关于如何在 Python 中实现类似结果的不同答案,我不希望构造函数中的默认参数或逻辑来处理不同的数据类型!!!我不明白为什么人们推荐这个作为替代方案。
这是一些 C# 代码,我基本上想在 Python 中做同样的事情。
class SomeClass{
int a;
double b;
string c;
public SomeClass(int value1, double value2)
{
a = value1
b = value2
}
public SomeClass(int value1, string value2)
{
a = value1
c = string
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码只是一个例子。我知道有一些技巧,例如测试参数类型并将此逻辑添加到我的构造函数或接受 Python 不是强类型并在我的类方法中编写逻辑以了解如何为不同类型处理 value2。
但是,我写的代码并不像上面的那么简单。我想处理如何处理不同对象或数据类型的参数。我想重载我的构造函数来处理不同类和数据类型的对象,即我可以传递 MyObject<MyObjectClass> 对象或 JSON 文件或文本文件/ CSV文件等。
而且我不想要一个 hacky if语句来测试是否通过了 JSON 文件。这是因为我的用于传递 CSV 文件的构造函数可能包含更多参数和/或与传递 JSON 文件不同的参数。
我发现 …
我有一个带有签名的方法,如下所示:
def get_users_for_survey(survey_id: (int, str),show_deleted_users: bool = False) -> list:
pass
Run Code Online (Sandbox Code Playgroud)
我避开了方法主体,因为我只对survey_id 的类型提示部分感兴趣?看起来这意味着它可以是 int 或 str。我想如果这是意图,那么它应该是survey_id:Union(int,str)。PyCharm 不反对。你认为我错过了 PEP 484 中的某些内容吗?我不认为它是一个元组。
编辑根据此处提供的答案,这只是一个错误。现在我知道这个错误的根源是什么。在同样的方法下一行是:
if survey_id and isinstance(survey_id, (int, str)):
Run Code Online (Sandbox Code Playgroud)
所以你在 isinstance 中看到,如果你想适应多种类型,这是一个有效的语法。这个方法的作者认为这也是一个有效的类型提示语法。这里是一个参考: Python isinstance with multiple types
因此,我对Python还是很陌生,对于使用参数还是参数还是很困惑。例如,我将如何编写一个接受字符串作为参数的函数?
在Python中,如果要定义变量,则不必指定其类型,这与其他语言(如C和Java)不同.
那么Python解释器如何区分变量并在内存中提供所需的空间,如int或float?
我想在python函数中定义2个变量,并将它们显式定义为float.但是,当我尝试在函数参数中定义它们时,它显示语法错误.
请帮我获得所需的输出.
这是代码:
def add(float (x) , float (y)) :
z = (x+y)
return (print ("The required Sum is: ", z))
add (5, 8)
Run Code Online (Sandbox Code Playgroud) python ×10
function ×2
python-3.x ×2
arguments ×1
colon ×1
explicit ×1
pandas ×1
parameters ×1
pep ×1
pycharm ×1
python-2.7 ×1
string ×1
syntax ×1
type-hinting ×1
types ×1
typing ×1