我有一个基类Person
和派生类Manager
和Employee
。现在,我想知道的是创建的对象是Manager
或Employee
。
此人如下:
from Project.CMFCore.utils import getToolByName
schema = getattr(Person, 'schema', Schema(())).copy() + Schema((TextField('FirstName', required = True, widget = StringWidget(label='First Name', i18n_domain='project')), TextField('Last Name', required = True, widget = StringWidget(label='Last Name', i18n_domain='i5', label_msgid='label_pub_city'))
class Manager(BaseContent):
def get_name(self):
catalog = getToolByName(self, "portal_catalog")
people = catalog(portal_type='Person')
person={}
for object in people:
fname = object.firstName
lname = object.lastName
person['name'] = fname+' '+ lname
# if the derived class is Employee then i would like go to the method title of employee and if its a Manager then go to the title method of Manager
person['post'] = Employee/Manager.title()
return person
对于经理和员工来说,他们是一样的(员工也很相似,但有一些不同的方法)
from Project.Person import Person
class Manager(Person):
def title(self):
return "Manager"
对于Employee,标题是“Employee”。当我创建一个Person
时,它要么是Manager
,要么是Employee
。当我得到person对象时,类是person,但我想知道它是来自派生类“Manager”还是“Employee”。
我不知道这是否是你想要的,以及你希望它实现的方式,但这里有一个尝试:
优点:只有一个
_type
方法的定义。我不完全确定我是否理解您的要求,但是您可以使用
x.__class__.__name__
将类名作为字符串检索,例如或者,可以使用isinstance检查不同类型:
所以你可以这样做:
Python对象提供一个
__class__
属性,该属性存储用于生成该对象的类型。这依次提供了一个__name__
属性,该属性可用于以字符串形式获取类型的名称。所以,简单来说:会给出:
'B'
所以,如果我正确地回答了你的问题,你就会:
相关问题 更多 >
编程相关推荐