2013-07-19 70 views
-1

我想,当我打电话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'

回答

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() 
+0

所以我不得不使用两个类? – kangfend

+0

谢谢先生.. :) – kangfend

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 
+0

我有一个任务。创建一个可以做到这一点的类:

 date.now() output: 'now' date('hai') output: 'hai' date.now output: 'now' date.now.hour output: 'hour' 
kangfend

+0

这种语法,在没有()的情况下调用没有参数的函数就是在Ruby或VB中执行的操作 - 除非将函数设置为属性 - 在这种情况下'date.now()'会失败,因为返回的字符串值不可调用。 – PaulMcG

2

now功能设置你的类属性hour。如果下面你将看到小时打印:

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

nowDate类中的方法,hour是一个属性:

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

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

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

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

我有一项任务,当我打电话给date.now.hour – kangfend

+1

时打印“小时”字符串,这没有任何意义。你能像发现它一样发布任务,而不是像你在解释它吗?在我看来,似乎存在某种误解。 (你不能 '呼' 的字符串) – lolopop

+0

使一个类可以做到这一点: date.now() 输出: '现在' 日期( '海') 输出: '海' 日期。现在 输出:'now' date.now.hour 输出:'hour' – kangfend