from typing import Generic, TypeVar, cast
from dataclasses import dataclass
@dataclass
class SteamSave:
prop: int
@dataclass
class XboxSave:
prop: str
T = TypeVar('T', SteamSave, XboxSave)
class Editor(Generic[T]):
def __init__(self, save: T):
self.save_data = save
def print_prop(self):
print(self.save_data.prop)
class Editor2():
def __init__(self, save: SteamSave | XboxSave):
self.save_data = save
def print_prop(self):
print(self.save_data.prop)
print(Editor)
print(Editor[SteamSave])
print(Editor[XboxSave])
VSCode 对两个类 self.save_data.prop
的类型推断结果:
int* | str*
和 int | str
有什么区别,多出来的星号是什么意思?
在 Python 的类型注解(type hints)中,并没有直接使用 int* | str*
这样的语法来表示类型。这看起来像是一个误解或者是对其他编程语言(如 C 或 C++)中指针概念的混淆。在 Python 中,int | str
是使用 Python 3.10 及以后版本引入的联合类型(Union Type)的正确方式,它表示一个变量可以是 int
类型或 str
类型中的任何一个。
在你的例子中,Editor
类使用了泛型(Generics)来接受一个类型参数 T
,这个 T
被限制为 SteamSave
或 XboxSave
。因此,当你实例化 Editor[SteamSave]
或 Editor[XboxSave]
时,self.save_data
相应地会被推断为 SteamSave
或 XboxSave
类型的实例,而 self.save_data.prop
则分别被推断为 int
或 str
类型。
另一方面,Editor2
类直接在其构造函数中使用了 SteamSave | XboxSave
作为 save
参数的类型注解。这同样表示 save
参数可以是 SteamSave
或 XboxSave
类型的实例。在这种情况下,VSCode 或其他类型检查工具应该能够推断出 self.save_data.prop
的类型也是 int
或 str
(尽管这种推断可能依赖于工具对类属性的理解程度)。
关于 int* | str*
中的星号(*
),在 Python 的类型注解中,星号没有直接的含义。如果你在 Python 代码中看到这样的表示,它很可能是个错误,或者是对其他语言特性的误解。在 C 或 C++ 中,星号用于表示指针类型,但在 Python 中,我们不需要(也不能)在类型注解中显式地表示引用或指针。Python 中的变量名总是指向对象的引用,但这种引用是隐式的,不需要在类型注解中显式声明。
总结来说,int | str
是 Python 中表示联合类型的正确方式,而 int* | str*
并不是 Python 中的有效语法,星号(*
)在这里没有特殊意义。
本文向大家介绍python中int与str互转方法,包括了python中int与str互转方法的使用技巧和注意事项,需要的朋友参考一下 最近学习python中的数据类型时,难免联想到java中的基本型数据类型与引用型数据类型。于是对python中的int与str做了简单赋值输出,出现了意料之外的事情。 使用int(object)后,a与b的地址是一样的。 补充:python在给变量赋值时默认格式为
我的程序需要一个函数,该函数从csv文件(“all.csv”)读取数据,并在特定日期提取与某个州有关的所有数据(提取其中包含“state name”和“date”的每一行),然后将提取的数据写入另一个名为:state.csv的csv文件 当数据被写入时,每个州在特定日期的病例数和死亡数被统计和合计。然后,该函数以元组形式返回总病例和死亡数(病例,死亡) 例如州=‘加利福尼亚’日期=‘2020-03
问题内容: 如果我尝试执行以下操作: …以及Python 2.x中的类似错误: 我该如何解决这个问题? 问题答案: 这里的问题是运算符在Python中(至少)具有两种不同的含义:对于数字类型,这意味着“将数字加在一起”: …,对于序列类型,它的意思是“连接序列”: 通常,Python不会为了使操作“有意义”而隐式地将对象从一种类型转换为另一种类型1,因为这会让人困惑:例如,你可能认为应该表示,但其
描述 (Description) 此方法返回指定子字符串最后一次出现的此字符串中的索引,从指定索引开始向后搜索。 语法 (Syntax) 以下是此方法的语法 - public int lastIndexOf(String str, int fromIndex) 参数 (Parameters) 这是参数的细节 - fromIndex - 从中开始搜索的索引。 str - 一个字符串。 返回值 (R
描述 (Description) 此方法返回指定子字符串第一次出现的字符串中的索引,从指定的索引开始。 如果没有发生,则返回-1。 语法 (Syntax) 以下是此方法的语法 - int indexOf(String str, int fromIndex) 参数 (Parameters) 这是参数的细节 - fromIndex - 从中开始搜索的索引。 str - 一个字符串。 返回值 (Ret
描述 (Description) 此方法接受String作为参数,如果字符串参数作为此对象中的子字符串出现一次或多次,则返回返回的最后一个子字符串的第一个字符的索引。 如果它不作为子字符串出现,则返回-1。 语法 (Syntax) 以下是此方法的语法 - public int lastIndexOf(String str) 参数 (Parameters) 这是参数的细节 - str - 一个字符