首页
学习
活动
专区
工具
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 链的哪个位置开始查找 # 第二个参数决定了使用哪个对象去调用自身或基类的成员函数 # 第二个参数必须为第一个参数的类型或者子类...()) # 调用Child的foo方法 Child.foo()总结super 类的使用有以下几种常见方式:super() 不带任何参数,这种方式等同于super(type, self)super...(type) 只带一个类型参数,第二个参数默认为 self 所指的实例对象super(type, obj) 既指定类型,又指定对象super(type, type2) 第二个参数指定为类型总的来说,Python

22065
  • 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.6K20

    类和对象的创建过程(元类,__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,这也是使用使用出变型的目的,对应java的Array...意味着T类型未知时,可以安全地读取Foo中TUpper的值 对于Foo,T为逆变类型参数,Foo等价于Foo,意味着当T类型未知时,无法安全写入Foo 对于Foo,T为不可变类型参数,带有上界

    98870

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

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

    93820

    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)。

    91110

    Python类型注解

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

    56010

    如何处理TypeScript中的可选项和Undefined

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

    3.8K10

    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 - 当在命令行中遇到这个参数时要采取的基本操作类型。

    7K20

    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

    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.7K20

    TS 进阶 - 类型基础

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

    1.8K50

    让你的 Python 静态起来

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

    98360

    原型和原型链

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

    59730

    Qt高级编码约定

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

    1.8K30
    领券