![](/img/trans.png)
[英]How to set a variable that is defined by the user's input? (Google Places API)
[英]How to set a variable's subproperty?
我是Python的新手。 我從軟件供應商那里獲得了一些Python示例代碼,他們使用boost.python擴展了他們的軟件API,因此我們可以在Python中調用它們。 我對某些部分感到困惑,例如:
settings = zoo.AddAnimalSettings(carni_bird_list)
settings.Name = 'birds'
settings.Type = settings.Type.enum.Bird
settings.water_min = 1, units.Litre
settings.food_min = 10, units.Gram
無論如何,所有變量名都被替換為這些有趣的東西,僅用於解釋一般概念。
所以這里的問題出在第三行。 我們如何settings.Type
帶有其子屬性settings.Type.enum.Bird
的變量settings.Type
,其中enum.Bird
我想是某種不同種類的動物的枚舉,它是settings.Type
的子屬性?
我嘗試做一些測試以在上述5行之后添加一行,以查看enum.Bird
是否仍然存在:
settings.Type = settings.Type.enum.Bird
而且可以。 因此,對於此實例settings
,其子屬性Type
不會被其enum.Bird
的子屬性覆蓋,它仍然知道enum.Bird
是其子屬性。
您能否建議我是否需要在Python中實現這一行,我該怎么做?
我想這對學習Python的人來說是一個非常有趣的知識,因此我在這里提出了這個問題以供討論。 我試圖以C ++的方式思考,但我沒有弄清楚。
我真的沒什么問題。 考慮在python中定義的Enum
:
import enum
class Type(enum.Enum):
Bird = 0
Cat = 1
Type.Bird
和Type.Cat
是Type
類的實例 :
>>> Type.Bird
<Type.Bird: 0>
>>> Type.Cat
<Type.Cat: 1>
因此,他們可以訪問自己的類,即Type
:
>>> Type.Bird.__class__
<enum 'Type'>
現在,您可以將一個property
添加到Type
類中並獲得該行為:
class Type(enum.Enum):
Bird = 0
Cat = 1
@property
def enum(self):
return self.__class__
現在您有:
>>> Type.Bird
<Type.Bird: 0>
>>> Type.Bird.enum
<enum 'Type'>
>>> Type.Bird.enum.Bird
<Type.Bird: 0>
>>> Type.Bird.enum.Cat
<Type.Cat: 1>
注意,雖然上面的允許你寫Bird.enum
不允許您訪問在Type.enum
因為這將返回property
的對象。
要獲得您在該代碼中看到的確切行為,可以執行以下操作:
將settings.Type
屬性settings.Type
為Type
的實例(可能是Invalid
的實例),並完成以下操作:
def AddAnimalSettings(*args) settings = MyClass(*args) settings.Type = Type.Bird return settings
將property
的使用替換為定制描述符,該描述符也將處理通過類的訪問。 在這種情況下,請閱讀有關property
的文檔,該文檔還提供了等效的python代碼。 當obj is None
時,您需要更改的情況是__get__
:
class MyProperty(object): # omissis def __get__(self, obj, objtype=None): if obj is None: return objtype # <-- changed this line if self.fget is None: raise AttributeError("unreadable attribute") return self.fget(obj)
將此用作:
class Type(enum.Enum): Bird = 0 Cat = 1 @MyProperty def enum(self): return self.__class__
現在您有了:
>>> Type.enum <enum 'Type'>
這樣Type.enum.Bird
工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.