我希望在拨打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'
答案 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)
now
是Date
类的方法,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'