Gold
不是Item
類中的一個屬性,no。它是一個子類,本身就是一個全球名稱。您可以從items
模塊導入:
>>> from items import Gold
>>> Gold
<class 'items.Gold'>
不能創建它的一個實例,因爲對於Item.__init__
方法用錯了名字:
>>> from items import Item
>>> Item.__init__
<slot wrapper '__init__' of 'object' objects>
>>> Item.__init___
<function Item.__init___ at 0x1067be510>
>>> Item('a', 'b', 4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object() takes no parameters
請注意,您所創建的方法有下劃線的名字。如果你解決這個問題:
class Item():
def __init__(self, name, desc, val):
#^^2 underscores on both sides
self.name = name
self.desc = desc
self.val = val
您可以創建Gold()
類的實例:現在
>>> Gold()
<items.Gold object at 0x1067cfb00>
>>> gold = Gold()
>>> print(gold.print_info())
Gold
==========
Golden coin.
Value: 5
,如果你真的想創造在Item
類屬性,你就必須添加這些後您創建的類:
class Item():
def __init___(self, name, desc, val):
self.name = name
self.desc = desc
self.val = val
def print_info(self):
return '{}\n==========\n{}\n\nValue: {}'.format(self.name, self.desc, self.val)
Item.gold = Item('Gold', 'Golden coin.', 5)
ÿ你不需要爲此創建子類。您可以使用enum
module雖然這裏:
from enum import Enum
class Item(Enum):
Gold = 'Golden coin.', 5
Silver = 'Silver coin.', 1
def __init__(self, desc, val):
self.desc = desc
self.val = val
def print_info(self):
return '{}\n==========\n{}\n\nValue: {}'.format(self.name, self.desc, self.val)
這裏Gold
是的Item
屬性:
>>> Item
<enum 'Item'>
>>> Item.Gold
<Item.Gold: ('Golden coin.', 5)>
>>> print(Item.Gold.print_info())
Gold
==========
Golden coin.
Value: 5
>>> Item.Silver
<Item.Silver: ('Silver coin.', 1)>
這意味着類Item沒有方法也沒有變量名爲Gold ...即使它沒有... G舊有沒有名爲'print_info'的方法或變量 – 2015-02-11 18:26:34
你爲什麼要調用'Item.Gold'? – 2015-02-11 18:27:49
'Gold'不是'Item'的一個屬性,所以'Item.Gold'沒什麼意義。這是一個子類,它是一個完全不同的東西。你想達到什麼目的? – freakish 2015-02-11 18:29:13