首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python类继承问题

Python类继承问题
EN

Stack Overflow用户
提问于 2009-05-29 20:28:24
回答 3查看 22.8K关注 0票数 16

我正在尝试Python类继承,并遇到了一个问题,如果从子类调用继承的__init__ (代码如下),我从Active Python得到的结果是:

>>> start
Tom Sneed
Sue Ann
Traceback (most recent call last):
  File "C:\Python26\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line 312, <br>in RunScript
    exec codeObject in __main__.__dict__
  File "C:\temp\classtest.py", line 22, in <module>
    print y.get_emp()
  File "C:\temp\classtest.py", line 16, in get_emp
    return self.FirstName + ' ' + 'abc'
AttributeError: Employee instance has no attribute 'FirstName'

下面是代码

class Person():
    AnotherName = 'Sue Ann'
    def __init__(self):
        self.FirstName = 'Tom'
        self.LastName = 'Sneed'

    def get_name(self):
        return self.FirstName + ' ' + self.LastName

class Employee(Person):
    def __init__(self):
        self.empnum = 'abc123'

    def get_emp(self):
        print self.AnotherName
        return self.FirstName + ' ' + 'abc'

x = Person()
y = Employee()
print 'start'
print x.get_name()
print y.get_emp()
EN

回答 3

Stack Overflow用户

发布于 2009-05-29 20:32:37

你应该显式地调用超类的init函数:

class Employee(Person):
    def __init__(self):
        Person.__init__(self)
        self.empnum = "abc123"
票数 9
EN

Stack Overflow用户

发布于 2009-05-29 20:31:04

Employee必须显式调用父级的__init__ (而不是init):

 class Employee(Person):  
    def __init__(self):  
         Person.__init__(self)  
         self.empnum = 'abc123'  
票数 5
EN

Stack Overflow用户

发布于 2010-11-11 02:25:51

不使用super(class, instance)模式,为什么不直接使用super(instance),因为类总是instance.__class__

是否存在不是instance.__class__的特定情况

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/927985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档