如何知道一个类里面的对象是什么?

时间:2014-05-19 14:40:13

标签: python class

我不知道这是否可行,但让我解释一下我尝试实现的目标(在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__作为示例,但它可以是我在类中定义的任何其他方法。

关键是我想在类定义中执行一些代码,具体取决于创建的实例。我不知道我是否有可能尝试做什么,或者是否有办法在课堂上知道正在做什么实例,或者这只是疯了。

3 个答案:

答案 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都有多个引用 - 第一个可以通过sedancars[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"