调用属性方法python

时间:2013-07-19 12:02:17

标签: python python-2.7

我希望在拨打date.now.hour时显示小时但我收到此错误

AttributeError: 'function' object has no attribute 'hour'

这是我的代码:

#!/usr/bin/python

class Date:
    def now(self):
        self.hour = "hour"
        print "Now"

    def __call__(self, string):
        print string    

date = Date()
date('hello') # print hello
date.now.hour # print hour

我的任务是

  

创建一个可以执行此操作的类:

     

date.now() - 输出:'now'

     

date('hai') - 输出:'hai'

     

date.now输出:'now'

     

date.now.hour输出:'hour'

5 个答案:

答案 0 :(得分:5)

只需将其称为date.now() - 您将永远无法访问该功能的hour属性,因为它是该对象的属性。

通过date.hour,您可以看到hour

>>> date.hour
'hour'

你应该做的是在你班级的__init__函数中设置所有这些属性。

class Date():
    def __init__(self, hour):
        self.hour = hour

    def now(self):
       print self.hour #if you will

    def __call__(self string):
       print string

答案 1 :(得分:2)

now功能正在您班级设置属性hour。如果您执行以下操作,您应该看到打印小时:

date = Date()
date.now()
date.hour

答案 2 :(得分:2)

nowDate类的方法,hour是属性:

date = Date()
date('hello') # print hello
date.now() # print Now
print date.hour # print hour

答案 3 :(得分:2)

你非常接近 - 你的任务之一已经完成:

  

date('hai') - output: 'hai'

剩下要做的还有

  

date.now() - 输出:'now'

     

date.now - 输出:'now'

     

date.now.hour输出:'hour'

所以你的date.now有很多要求,只有通过一个单独的课程才能完成:

class Now(object):
    def __str__(self): return ...
    def __call__(self): return ...
    hour = property(lambda self: 'hour')

或类似的东西。

您可以在class Date

中使用此课程

另一个选择是让now成为class Date的属性,但这可能类似。您需要上面的class Now,但是您会像

一样使用它
class Date(object):
    def __call__ # as before
    @property
    def now(self):
        return Now()

答案 4 :(得分:1)

date.hour是正确的方法。您为对象(self)分配小时,而不是为函数分配。

但是,在方法中初始化实例属性容易出错并且习惯不好。您应该重新定义__init__这样的方法:

class Date:
    def __init__(self):
        self.hour = 'hour'