在python 3我可以使参数和返回types注释。 例: class Graph: def __init__(self, V: int, E: int, edges: list): pass @classmethod def fromfile(cls, readobj: type(sys.stdin)): pass def V(self) -> int: pass def E(self) -> int: pass 问题是我不能使用当前类(Graph)的返回types做一个注释,这个类还没有定义。 例: class Graph: def reverse(self) -> Graph: pass 此代码与错误 def reverse(self) -> Graph: NameError: name 'Graph' is not defined 这些注释对于logging和允许IDE识别参数和返回types非常有用=>启用自动完成 UPD:所以我发现这是要么是不可能的,或者需要一些我不喜欢的黑客,所以我决定只使用def reverse (self) -> […]
为什么一些运算符只能作为成员函数被重载,其他的则作为非成员的“自由”函数,其余的都作为成员函数? 这些背后的理由是什么? 如何记住哪些运算符可以被重载为(成员,自由,或两者)?
我是否应该把我所知道的所有class级都封为基础class,即使没有切实的performance或安全考虑,或者这只不过是加重了这个问题?
我正在使用其他人编写的模块。 我想猴子修补模块中定义的类的__init__方法。 我已经find的例子展示了如何做到这一点,都假设我自己会调用这个类(例如Monkey-patch Python类 )。 然而,这种情况并非如此。 在我的情况下,这个类在另一个模块的函数中初始化。 看下面的(大大简化的)例子: thirdpartymodule_a.py class SomeClass(object): def __init__(self): self.a = 42 def show(self): print self.a thirdpartymodule_b.py import thirdpartymodule_a def dosomething(): sc = thirdpartymodule_a.SomeClass() sc.show() mymodule.py import thirdpartymodule_b thirdpartymodule.dosomething() 有没有办法修改SomeClass的__init__方法,以便当从mymodule.py中调用dosomething时,例如打印43而不是42? 理想情况下,我可以包装现有的方法。 我无法更改第三方模块* .py文件,因为其他脚本依赖于现有的function。 我宁愿不必创build自己的模块副本,因为我需要做的更改非常简单。 编辑2013-10-24 我忽略了上面例子中的一个小而重要的细节。 SomeClass是像这样from thirdpartymodule_a import SomeClass : from thirdpartymodule_a import SomeClass 。 要做FJbuild议的补丁,我需要replacethirdpartymodule_b的副本,而不是thirdpartymodule_a 。 例如thirdpartymodule_b.SomeClass.__init__ = new_init […]
我相当新的CSS3,我想能够做到以下几点: 当我将一个类添加到一个元素中时,它会覆盖这个特定元素中使用的另一个类的属性。 假设我有 <a class="left carousel-control" href="#carousel" data-slide="prev"> 我想能够添加一个名为bakground-none的类,它将覆盖left类中的默认背景。 谢谢!
我正在玩模板。 我不想重新发明std :: vector,我试图去掌握C ++中的模板。 我可以做以下吗? template <typename T> typedef struct{ size_t x; T *ary; }array; 我想要做的是一个基本的模板版本: typedef struct{ size_t x; int *ary; }iArray; 它看起来像是在工作,如果我使用类而不是结构,所以这是不可能的typedef结构?
我正在考虑使用typeid()但是我不知道如何判断这个types是否是另一个类的子类(顺便说一句,这是抽象的)
c ++中一个struct的成员和一个类的成员的默认值是什么,这些规则又是如何不同的(比如在classes / structs / primitives / etc之间)? 有没有关于默认值的规则有所不同的情况?
我知道你可以使用string连接来相互创build全局常量: define('FOO', 'foo'); define('BAR', FOO.'bar'); echo BAR; 将打印“foobar”。 但是,我得到一个错误,试图使用类常量来做同样的事情。 class foobar { const foo = 'foo'; const foo2 = self::foo; const bar = self::foo.'bar'; } foo2的定义没有问题,但是声明const bar会出错 parsing错误:语法错误,意外的'。',期待','或';' 我也尝试过使用像sprintf()这样的函数,但是它不像string连接符'''那样喜欢左边的文字。 那么有没有什么办法可以创build类常量,而不是像foo2这样的小事例呢?
这是一个后续问题。 在前面的问题中 ,@ JohannesSchaub-litb说下面的代码不完全符合标准: class { int i; }; //unnamed-class definition. § 9/1 allows this! 然后他补充说, 虽然它在语法上是有效的,但它打破了这样一个规则,即这样一个类必须至less将一个名称声明为它的封闭范围。 我真的不明白这一点。 他在说什么名字? 任何人都可以进一步详细说明(最好引用标准)?