0

我想在打电话时显示小时,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'

4

5 回答 5

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
于 2013-07-19T12:04:25.547 回答
2

now函数正在为hour您的类设置属性。如果您执行以下操作,您应该会看到打印的小时数:

date = Date()
date.now()
date.hour
于 2013-07-19T12:04:40.980 回答
2

nowDate类的方法,hour是属性:

date = Date()
date('hello') # print hello
date.now() # print Now
print date.hour # print hour
于 2013-07-19T12:04:54.403 回答
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()
于 2013-07-19T12:32:25.793 回答
1

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

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

class Date:
    def __init__(self):
        self.hour = 'hour'
于 2013-07-19T12:05:10.703 回答