在python 2.7中创建一个类的实例

时间:2013-12-23 05:00:48

标签: python class python-2.7 instance

我写了一段代码:

class NewsStory(object):
    def __init__(self, guid, title, subject, summary, link):
        NewsStory.guid = guid
        NewsStory.title = title
        NewsStory.subject = subject
        NewsStory.summary = summary
        NewsStory.link = link

    def getGuid(self):
        return self.guid

    def getTitle(self):
        return self.title

    def getSubject(self):
        return self.subject

    def getSummary(self):
        return self.summary

    def getLink(self):
        return self.link

当我添加一个实例时:

test = NewsStory('foo', 'myTitle', 'mySubject', 'some long summary', 'www.example.com')

print test.getGuid()给了我foo,这是正确的。但是,如果我不断创建两个实例:

test = NewsStory('foo', 'myTitle', 'mySubject', 'some long summary', 'www.example.com')
test1 = NewsStory('foo1', 'myTitle1', 'mySubject1', 'some long summary1', 'www.example1.com')

print test.getGuid()print test1.getGuid()给了我foo1但没有foo。为什么会这样?是否有一种方法可以修改类中的类定义或函数,以避免新创建的实例覆盖旧实例?

谢谢。

3 个答案:

答案 0 :(得分:3)

您需要在__init__函数实例变量中生成这些变量,而不是 class 变量。

实例变量如下所示:

self.guid = guid

类变量如下所示:

NewsStory.guid = guid

类变量对于类的所有成员都是相同的,但实例变量对于该类的实例是唯一的。

答案 1 :(得分:1)

在创建类的实例后调用__init__方法。按惯例称为self的第一个参数是类的实例。 NewsStory是班级本身。

在您的代码中,您正在创建类变量。你想要实例变量:

self.guid = guid

答案 2 :(得分:1)

您正在修改类变量,所有对象共有。你应该做的是在对象中创建这些变量,比如

    self.guid = guid
    self.title = title
    self.subject = subject
    self.summary = summary
    self.link = link