2017-06-20 66 views
1

我有以下模塊結構的包內定義的類的列表:返回的使用檢查

Directory structure of my code

內部Person.py的代碼是:

class person: 
    def __init__(self,name,age): 
     self.name = name 
     self.age = age 

    def displayage(self): 
     print ("Your age is {0}".format(self.age)) 

內部Vechile.py是:

class vechile: 
    def __init__(self,type): 
     self.type = type 

    def display_type(self): 
     print ("Your vechile type is {}".format(self.type)) 

裏面__init__.py

pass 

而且裏面Test.py我想知道里面Person.pyVechile.py定義的類名。

import inspect 
from Fetch import Vechile 
from Fetch import Person 

modules = ['Vechile','Person'] 
for module in modules: 
    for name, obj in inspect.getmembers(module): 
     if inspect.isclass(name): 
      print (obj) 

v = Vechile.vechile("Auto") 
print (v) 

,我得到的答案是隻有這個:

<Fetch.Vechile.vechile object at 0x0000000000DD0C18>

我要去哪裏錯了?我如何獲得PersonVechile中定義的類別列表?

+0

不應該'Vechile'成爲'Vehicle'嗎? –

+0

Offtopic,但你的命名不一致,爲什麼'displayage'和'display_type' – donkopotamus

回答

3

您正在傳遞一個模塊名作爲一個字符串inspect.getmembers這裏:

modules = ['Vechile','Person'] 
for module in modules: 
    for name, obj in inspect.getmembers(module): 
     ... 

這將是尋找一個字符串實例的成員,一個模塊的不是成員。要找到某個模塊的成員,請給指定一個模塊

modules = [Vechile, Person] 
for module in modules: 
    for name, obj in inspect.getmembers(module, inspect.isclass): 
     # no need to check if is class here 
     ... 
+0

不要認爲它的工作。我照你的話做了。我仍然有相同的輸出。 –

+0

@SubhayanBhattacharya可能是因爲在你原來的代碼中,你檢查過'name'是一個類,而不是'obj' ... – donkopotamus

+0

是的,這是真的。非常感謝您指出錯誤。 –

0

我想我解決了你的錯誤。

Person.py

class person(): 
    def __init__(self,name,age): 
     self.name = name 
     self.age = age 

    def displayage(self): 
     return("Your age is {0}".format(self.age)) 

Vechile.py

class vechile(): 
    def __init__(self,type): 
     self.type = type 

    def display_type(self): 
     return("Your vechile type is {}".format(self.type)) 

Test.py(保持不變)

import inspect 
from Fetch import Vechile 
from Fetch import Person 

modules = ['Vechile','Person'] 
for module in modules: 
    for name, obj in inspect.getmembers(module): 
     if inspect.isclass(name): 
      print (obj) 

v = Vechile.vechile.display_type("Auto") 
print (v) 
+0

不以這種方式工作!我很抱歉,我仍然有相同的輸出。 –

0

有兩件事情錯在main.py。這裏有一個固定的版本,其中包含以下變化:

import inspect 
from Fetch import Vechile 
from Fetch import Person 

modules = [Vechile, Person] # changed 
for module in modules: 
    for name, obj in inspect.getmembers(module): 
     if inspect.isclass(obj): # changed 
      print(obj) 

v = Vechile.vechile("Auto") 
print(v)