我不知道这是否可行,但让我解释一下我尝试实现的目标(在Python中):
class Vehicle:
def __init__(self, pos, vel):
self.pos = pos
self.vel = vel
def __str__(self):
#I want to know here if it is either Sedan or Sport
if Sedan:
print "Sedan"
elif Sport
print "Sport"
else:
print "unknown"
Sedan = Vehicle( pos1, vel1)
Sport = vehicle( pos2, vel2)
print Sedan
注意:我只使用方法:__str__
作为示例,但它可以是我在类中定义的任何其他方法。
关键是我想在类定义中执行一些代码,具体取决于创建的实例。我不知道我是否有可能尝试做什么,或者是否有办法在课堂上知道正在做什么实例,或者这只是疯了。
答案 0 :(得分:3)
你想要什么是不可能的(也没有意义)。类(或函数)不能“知道”位于其他位置的变量的名称。您描述的内容(根据上下文执行某些代码)是继承的典型用例。因此,要添加与上下文相关的代码,只需扩展基类
即可class Sedan(Vehicle):
def __str__(self):
return "Sedan"
class Sport(Vehicle):
def __str__(self):
return "Sport"
答案 1 :(得分:1)
我会传递类似kind
到__init__
的内容:
def __init__(self, pos, vel, kind):
self.pos = pos
self.vel = vel
self.kind = kind
def __str__(self):
print(self.kind)
虽然在Python中,__str__
应该return
,而不是print
。
即:
def __str__(self):
return self.kind
答案 2 :(得分:0)
在Python中,名称(例如示例中的Sedan
)只是对象的引用。如果您依赖于变量对功能的引用,那么您可能做错了。
考虑这个简单的例子:
sedan = Vehicle(...)
sport = Vehicle(...)
cars = [sedan, sport]
for car in cars:
print(car)
现在每个Vehicle
都有多个引用 - 第一个可以通过sedan
和cars[0]
访问,并且在for
循环的第一次迭代中,car
。在__str__
中,应该使用哪个引用?
使类实例所需的数据显式工作要好得多,例如:
class Vehicle:
def __init__(self, pos, vel, type_=None):
self.pos = pos
self.vel = vel
self.type_ = type_
def __str__(self):
return "unknown" if self.type_ is None else self.type_
sedan = Vehicle(pos1, vel1, "sedan")
或者,如果两种类型的Vehicle
之间存在更多根本差异(例如,不同的属性,而不仅仅是属性的不同值),请考虑继承:
class Sedan(Vehicle):
def __str__(self):
return "sedan"