首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当使用self.__class__()返回Foo类的实例时,为什么PyCharm认为类型应该是可选的[Type[Foo]]?

当使用self.class()返回Foo类的实例时,PyCharm认为类型应该是可选的[Type[Foo]]的原因是因为self.class()返回的是Foo类的实例,而不是Foo类本身。在Python中,类也是对象,可以通过类名加括号的方式来创建类的实例。因此,self.class()返回的是Foo类的实例对象,而不是Foo类本身。

在类型提示中,[Type[Foo]]表示一个类型注解,表示参数的类型是Foo类或Foo类的子类。可选的意味着这个类型是可选的,即参数可以是None或者Foo类的实例。

关于类型提示和类型注解的更多信息,可以参考腾讯云的Python开发文档中的类型提示部分:Python类型提示

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python 中 mro 链在 super 调用中应用

简单super使用class A(object): def __init__(self): print(self....A,在使用 super ,三种写法:super()....# C2实例为 B 子类对象 # super 第一个参数决定了从 mro 链哪个位置开始查找 # 第二个参数决定了使用哪个对象去调用自身或基成员函数 # 第二个参数必须为第一个参数类型或者子类...()) # 调用Childfoo方法 Child.foo()总结super 使用有以下几种常见方式:super() 不带任何参数,这种方式等同于super(type, self)super...(type) 只带一个类型参数,第二个参数默认为 self 所指实例对象super(type, obj) 既指定类型,又指定对象super(type, type2) 第二个参数指定为类型总的来说,Python

19965
  • typescript基础篇(7):类型检查机制

    let arr = [] // 推断为any[] let arr2 = [1] //推断为 number[] // 需要从几个表达式中推断类型时候,会使用这些表达式类型来推断出一个最合适通用类型...7.2 类型兼容性 一个类型Y可以被赋值给另一个类型Y,我们就可以说,X兼容Y。...X兼容Y:X(目标类型)= Y(源类型) 举个例子,tsconfig.json中"strictNullChecks": false,以下操作被允许: let s: string = "a" s...因为在typescript中,null被默认为字符串类型。因此可以说:字符串类型兼容null类型。...让我们重新温故下鸭子模型: " 看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。 "——在鸭子类型中,关注不是对象类型本身,而是它是如何使用

    1.5K20

    和对象创建过程(元,__new__,__init__,__call__)

    type()函数既可以返回一个对象类型,又可以创建出新类型,比如,我们可以通过type()函数创建出MyClass,而无需通过Class MyClass(object)...定义: 方式二 动态创建...,遇到class Foo即声明要创建一个Foo,就会调用type__init__方法创建,由于此处(metaclass=MyType),即指定了Foo创建方式,所以会执行type派生MyType...使用 Persion(name, age) 这样表达式来实例化一个,最先被调用方法 其实是 __new__ 方法。...以上面的代码为例,我们实例化一个对象obj=Foo(),会先执行Foo__new__方法,没写,用父__new__方法,创建一个对象,并返回,然后执行__init__方法(自己有就用自己,...,影响创建;同理,这俩个函数在普通,影响创建是普通对象实例

    1.2K50

    Kotlin基础之泛型

    例如: val box: Box = Box(1) 类型可以从构造参数或其他上下文中推断出,可以忽略类型参数。...而Kotlin没有任何通配符类型,它使用声明处变型和类型投影两种方式替代。 通配符 - 使用问号表示类型参数,表示未知类型类型约束方法。 首先,先思考为什么Java需要这些难以理解通配符。...称C是参数T协变量,或T是协变量类型参数。可以认为C是T生产者,而不是T消费者。 out修饰符称为变型注解,因为它提供了类型参数声明点,因此称之为声明点类型。...(type projection),也是说from不是一个简单数组,而是受限(投影)类型:只能够调用那些返回类型为T方法,在这种情况意味着只能调用get,这也是使用使用出变型目的,对应javaArray...意味着T类型未知,可以安全地读取Foo中TUpper值 对于Foo,T为逆变类型参数,Foo等价于Foo,意味着T类型未知,无法安全写入Foo 对于Foo,T为不可变类型参数,带有上界

    96370

    每天一道 python 面试题 - Python中(metaclass)

    定义实例(即对象)行为,而元定义行为。是元实例 虽然在Python中您可以对元使用任意可调用对象(例如Jerub演示),但是更好方法是使其成为实际。...type是Python中常见type它本身是一个,并且是它自己类型。您将无法type纯粹使用Python 重新创建类似的东西,但是Python有点作弊。...要在Python中创建自己,您实际上只想将其子类化type。 元最常用作工厂。您通过调用创建对象,Python通过调用元来创建一个新(执行“ class”语句)。...但是,元实际上定义了类型,而不仅仅是它工厂,因此您可以使用它们做更多事情。例如,您可以在元上定义常规方法。...这些元方法就像方法,因为它们可以在没有实例情况下在上调用,但是它们也不像方法,因为它们不能在实例上被调用。type.__subclasses__()是type上方法示例。

    92820

    如何处理TypeScript中可选项和Undefined

    ; 在类型、接口或定义中,在属性名称中添加?将会把该属性标记为「可选type Foo = { bar?...如果你传值为{ foo: 0 } ,这段代码就会抛出异常。 函数和方法可以具有可选参数 函数和方法可以具有可选参数,正如类型、接口和也可以具有可选参数一样。函数和方法可选参数也使用?...: Bar } type Bar = { baz?: Baz } type Baz = { qux?: number } 嵌套不深,我们可以使用typeof来进行检查。...断言存在 谈论到,TypeScript分析可以标记那些没有显式初始化属性,这可以为你省去一些麻烦。如果你正在使用框架在代码运行之前,要确保你对这些属性进行设置,那么它也会产生一些麻烦。...设置为可选,从而使编译器满意。但你也会因为不得不写类型保护,从而使自己不满意。 如果你确定这些属性肯定会被设置,那么你可以使用!来进行断言。TypeScript会认为你知道你在说些什么。

    3.7K10

    Python Web开发中WSGI协议

    为什么需要WSGI 我们使用web框架进行web应用程序开发,只专注于业务实现,HTTP协议层面相关事情交于web服务器来处理,那么,Web服务器和应用程序之间就要知道如何进行交互。...,包含WSGI环境信息)与start_response(一个响应请求函数)    - 返回一个iterable可迭代对象 可调用对象可以是一个函数、或者实现了__call__方法实例。...实现中定义了__iter__方法,返回实例就变为了iterable可迭代对象。...,这个值需要为True   - wsgi.run_once:server期望application对象在进程生命周期内只被调用一次,该值为True 我们可以使用python官方库wsgiref...响应headers   - exc_info(可选): 用于出错,server需要返回给浏览器信息 start_response必须返回一个write(body_data)。

    89810

    argparse------用于命令行选项、参数和子命令解析器

    recent call last): ..ArgumentError: argument --foo: conflicting option string(s): --foo有时(例如,使用)...这些操作将const值添加到parse_args()返回对象一个属性中。有关示例,请参见操作描述。使用选项字符串(如-f或——foo)和nargs='?'调用add_argument()。...Action实例应该是可调用,因此子类必须覆盖_call__方法,该方法应该接受四个参数: parser - 包含此操作ArgumentParser对象。...一个程序执行几个不同函数,而这些函数又需要不同类型命令行参数,以这种方式分割功能可能是一个特别好主意。...parser_class - 用于创建子解析器实例,默认情况下是当前解析器(例如ArgumentParser)。 action - 当在命令行中遇到这个参数要采取基本操作类型

    6.9K20

    Python类型注解

    单凭返回值注解为 str 是不能准确表达此情况。 这种可能有也可能没有的状态被称为可选值,在某些项目中非常常见。...如果函数返回值是多种类型一种,可以这样写: from typing import Union def foo() -> Union[str, int, float]: # .......只要实现了对应接口,实例也可以是可调用。...当然如果你把所有的类型都注解为 Any 将毫无意义,因此 Any 应当尽量少使用。 泛型 要理解泛型,首先得知道没有它所遇到麻烦。 假设有一个函数,要求它既能够处理字符串,又能够处理数字。...仅仅通过查看函数类型注解,就可以获得所有这些信息。 重点来看下_例3_类型检查为什么会失败: dict_2 定义,其键被定义为整型。

    50410

    TypeScript 4.2 正式发布:更智能类型别名保留,声明缺失帮助函数,还有许多破坏性更新

    TypeScript 是 JavaScript 一个扩展,增加了静态类型类型检查。使用类型,你可以准确声明你函数接收什么类型参数,返回什么类型结果。...; } } 为了这些情况更简单,不久前,TypeScript 允许一个类型有一个字符串索引符号使用“点式”属性访问语法(如person.name)。...推断程序文件是一个复杂过程,因此有很多原因可以解释为什么使用lib.d.ts特定组合,为什么要包括node_modules中某些文件,以及要包含某些文件金骨干我们认为指定exclude会将它们排除在外...tsc --explainFiles 使用此选项,TypeScript 编译器将给出一些非常详细输出,说明文件为什么会出现在程序中。...赋值给可变变量,这些类型将被放宽为string。

    3.2K20

    以淘宝店铺为例,谈谈 TypeScript ESLint 规则集考量

    规则会要求你为函数与方法显式声明其返回值,switch-exhaustiveness-check 规则会要求你处理联合类型变量所有类型分支。...ban-types 禁止部分值被作为类型标注,此规则能够对每一种被禁用类型提供特定说明来在触发此规则报错给到良好提示,场景如禁用 {}、Function、object 这一被作为类型标注, 为什么...对于未知对象类型,应使用 Record 对于函数类型,应使用入参、返回值被标注出来具体类型type SomeFunc = (arg1: string) => void...explicit-module-boundary-types 函数与方法返回值需要被显式指定,而不是依赖类型推导,如: const foo = (): Foo => {}; 为什么:通过显式指定来直观区分函数功能...tmp 为什么:冗余 no-non-null-asserted-optional-chain 不允许非空断言与可选链同时使用foo?.bar! 为什么:和上一条规则一样属于冗余,同时意味着你对 !

    2.7K30

    TS 进阶 - 类型基础

    在没有开启 strictNullChecks 检查,会被视为其他类型类型,如 string 类型会被认为包含了 null 和 undefined。...各修饰符含义: public 此类成员在实例、子类中都可以访问; private 此类成员只能在内部访问; protected 此类成员只能在内部和子类中访问; 不显式使用访问性修饰符...静态成员不会被实例继承,始终属于当前定义这个(及其子类)。原型对象上实例成员会沿着原型链进行传递,能被继承。...此时,可以使用私有构造函数来组织其被错误实例化,如在创建 Utils ,其内部都是静态成员。...,包括赋值、访问、方法调用等,此时可以认为类型推导与检查完全被禁用: let anyVal: any = null; anyVal.foo.bar(); anyVal(); anyVal = 'Cell

    1.8K50

    Python 模块:argparse

    formatter_class - 用于自定义帮助文档输出格式 prefix_chars - 可选参数前缀字符集合(默认值:'-') fromfile_prefix_chars - 需要从文件中读取其他参数...default - 参数未在命令行中出现时使用值。 type - 命令行参数应当被转换成类型。 choices - 可用参数容器。...注解 因为用户期望选项是可选,所以必选项大部分地被认为是坏格式,因此如果可能的话,避免使用。 help help 值是一个包含这个参数简短描述字符串。...行为实例(或者任何可调用对象 action 参数返回值)应该有几个被定义属性 dest,option_strings,default,type,required,help 等。...行为实例应该是可调用,所以子类必须重写应该接收 4 个参数 __call__ 方法: parser - 包含这个行为 ArgumentParser 对象。

    2.5K10

    TypeScript另一面:类型编程

    但就当个例子看吧:-) function foo(arg: T): T { return arg; } 我们使用T来表示一个未知类型,它是入参与返回类型,在使用时我们可以显示指定泛型:...这一细碎基础知识会被穿插在文中各个部分进行讲解,以此避免单独讲解缺少特定场景让相关概念显得过于单调。...ReturnType被调用,泛型T被实际类型填充,如果T满足条件类型约束,就返回R值,在这里R即为函数返回值实际类型。...P : never; 加上new关键字来使其成为可实例类型声明,也就是此处泛型约束需要一个。...这个是获得构造函数入参类型,如果把待 infer 类型放到其返回处,想想 new 一个返回值是什么?实例

    1.6K20

    让你 Python 静态起来

    Django model Protocol 自定义类型 普通用法 型自定义 辅助函数 typing-extensions 实例:简化枚举类型 工程技巧 避免循环引用 mypy 再让我们看看那个例子...我们可以对任何变量进行类型注解,无论是赋值之前还是函数传参和返回 # 我们可以从、模块、函数 `__annotations__` 变量中获取这些注解 nine_realms: List[str] =...官方推荐使用类型注解,所以类型注释内容就不再展开了。 Gradual typing 类型注解只会生存于“编码”,并不影响运行时,我们可以放心大胆地为旧代码添加注解,而不用担心对实际功能产生影响。...List[str]): ... # raises TypeError 简单来说,任何一种 “” 都可以被当作一种 ”类型“,反过来 ”类型” 却不一定能被当作 “使用。...简单来说,她就是“类型类型”。和 type 可以创造 “” 一样,我们可以通过 TypeVar 来创造 “类型”。

    95360

    原型和原型链

    (显式原型)属性,也是一个普通对象 4.所有引用类型(对象,数组,函数)__proto__值指向它构造函数prototype 5.试图得到一个对象属性,如果变量本身没有这个属性,则会去他__proto...2.同时new两个对象改变一个对象原型中引用类型属性,另一个对象该属性也会修改。...Sub.prototype = new Super(); 优点:不存在引用属性共享问题,可传参,函数可复用 缺点:父属性会被实例化两次,获取不到真正实例(无法区分实例是父创建还是父创建...缺点:无法区分实例是父创建还是子类创建 可以添加以下代码: Foo.prototype.constructor = Foo 这种解决方法不能用于上面的组合优化方法,因为子类父引用是同一个原型对象...通过组合继承我们使用call继承属性,使用原型继承方法,可以解决以上两个问题,但是通过这种方式实例化出来对象会存储两份父构造函数中属性。

    58930

    Qt高级编码约定

    不要使用dynamic_cast,不要对QObject使用qobject_cast或重构设计,例如,通过引入type()方法(请参阅QListWidgetItem)。 使用构造函数强制转换简单类型。...另外重构代码,编译器会立即通知您是否强制转换会很危险。 编译器/平台特定问题 使用问号运算符要格外小心。如果返回类型不同,则某些编译器会生成在运行时崩溃代码(您甚至不会收到编译器警告)。...因为,除了上述链接提到原因外。运算符是成员,参数也不相等。...*/ #if Foo - 0 == 0 /* 自认为这种方法很聪明,是吗?...std::generate(begin, end, &Foo::someStaticFunction); ... } 为什么会出现这一规定(不能在lambda中使用静态函数)?

    1.7K30
    领券