我刚刚开始学习python并正在阅读有关课程的内容.
这是我为一个简单的可迭代类编写的代码:
class maths:
def __init__(self,x):
self.a=x
def __iter__(self):
self.b=0
return self
def next(self):
if self.b <= self.a:
self.b = self.b+1
return self.b-1
else:
raise StopIteration
x=maths(5)
for l in x:
print l
Run Code Online (Sandbox Code Playgroud)
对于next()方法,当我使用__next__(self)时:
显示以下错误
Traceback (most recent call last):
File "class.py", line 20, in <module>
for l in x:
TypeError: instance has no next() method
Run Code Online (Sandbox Code Playgroud)
任何人都可以阐明这种行为.我看到了Mark Pilgrim使用这种__next__方法进入python 3书的一个例子.即使这个例子没有在我的翻译上运行.谢谢你抽出时间来帮助我!
我有以下代码.
HTML
<p id="test">hello</p>
Run Code Online (Sandbox Code Playgroud)
JavaScript的
document.getElementById("test").addEventListener("click", function() {
console.log("called");
document.getElementById("test").click();
});
document.getElementById("test").click();
Run Code Online (Sandbox Code Playgroud)
当我运行它时,控制台只打印一次"被叫".我的问题是javascript使用什么机制来避免无限调用回调?
给出以下示例,
class A(object):
pass
a = A()
a.x = 1
Run Code Online (Sandbox Code Playgroud)
显然是一个可变的,然后我把一个放入一套,
set([a])
Run Code Online (Sandbox Code Playgroud)
它成功了.为什么我可以将像"a"这样的可变对象放入set/dict中?不应该设置/ dict只允许不可变对象,以便他们可以识别对象并避免重复?
我知道使用属性的主要目的之一是用于验证和格式化。例如,我有一个如下所示的 User 类。我希望名字和姓氏在设置时大写。如果我可以编写以下代码来实现相同的格式化结果,为什么还需要属性?
class User:
def __init__(self, firstname, lastname):
self.firstname = firstname
self.lastname = lastname
def __setattr__(self, attr, value):
if attr == 'firstname':
self.__dict__[attr] = value.capitalize()
elif attr == 'lastname':
self.__dict__[attr] = value.capitalize()
Run Code Online (Sandbox Code Playgroud) 大家。我最近正在学习OAuth身份验证。我在玩Google的oauth api。在用于服务器端应用程序的Google登录的教程中,第三步-初始化GoogleAuth对象,您需要提供客户端ID来初始化GoogleAuth对象。我只是想知道我们是否需要对客户端ID保密,因为现在任何人都可以通过查看javascript找出客户端ID是什么。
有时我们需要使用notifySubscribers来强制执行一个observable的订阅者,你可以传递一个param给notifySubscribers,但问题是传递的param既不会改变observable的值,也不会传递给订阅者,那么为什么使用它?我在一些 Knockout 文档中看到,传递了一个参数,例如,在这个. 这是一个jsfiddle 代码片段,它验证了 param 未在任何地方使用的事实。我错过了什么,还是参数确实毫无意义?
jsfiddle html中的代码
<div data-bind="text: $data.content"></div>
Run Code Online (Sandbox Code Playgroud)
javascript
var viewModel = {
content: ko.observable('original')
};
var cpted = ko.computed(function(){
alert(viewModel.content());
return viewModel.content();
});
ko.applyBindings(viewModel);
viewModel.content.notifySubscribers('new value');
alert(viewModel.content());
Run Code Online (Sandbox Code Playgroud)