相关疑难解决方法(0)

__init__的正确类型注释

__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__函数本身没有返回值.

python typing python-2.7

11
推荐指数
2
解决办法
4512
查看次数

设置IntelliJ/Pycharm以处理pandas"Unresolved references"警告

每当我尝试访问Series或DataFrame的非方法属性(例如columnsloc)时,IntelliJ都会抛出一个"未解析的引用"警告,它不会使我的代码崩溃,但是看起来很烦人.我宁愿不要禁用这个检查,我想避免使用抑制来加密我的代码.

我已经为调试器设置了"收集代码洞察的运行时类型信息"选项,但这不起作用.我也尝试在Inspections选项卡的"忽略引用"列表中添加忽略引用,但我尝试的任何内容似乎都无效.

我得到的警告将是这样的Cannot find reference loc in 'Series | Series'.

python intellij-idea suppress-warnings pycharm pandas

8
推荐指数
1
解决办法
761
查看次数

Python类型提示 - 方法返回当前类的列表

我有一个看起来像这样的课程:

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 types

7
推荐指数
2
解决办法
1638
查看次数

Python 3.5类型提示不会导致错误

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 type-hinting python-3.x

5
推荐指数
2
解决办法
1127
查看次数

foo:'bar'| 冒号在这个python表达式中做了什么?

我刚刚偶然发现了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 syntax colon

5
推荐指数
0
解决办法
41
查看次数

在 Python 中重载构造函数

简单地说,在 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 文件不同的参数。

我发现 …

python

5
推荐指数
1
解决办法
2358
查看次数

这个 Python 类型提示语法是什么,括号中的两种类型?

我有一个带有签名的方法,如下所示:

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 pep

5
推荐指数
1
解决办法
1302
查看次数

参数vs参数Python

因此,我对Python还是很陌生,对于使用参数还是参数还是很困惑。例如,我将如何编写一个接受字符串作为参数的函数?

python string parameters arguments function

4
推荐指数
3
解决办法
2895
查看次数

了解变量类型,名称和赋值

在Python中,如果要定义变量,则不必指定其类型,这与其他语言(如C和Java)不同.

那么Python解释器如何区分变量并在内存中提供所需的空间,如intfloat

python

3
推荐指数
2
解决办法
159
查看次数

在Python函数中显式定义数据类型

我想在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 floating-point explicit function python-3.x

3
推荐指数
2
解决办法
6022
查看次数