python – Tuples的麻烦

我在Python中做了一些OOP,当用户输入一个元组作为其中一个参数时,我遇到了麻烦.这是代码:

class Height:
    def __init__(self,ft,inch=0):
        if isinstance(ft,tuple):
            self.feet = ft
            self.inches = inch
        elif isinstance(ft,int):
            self.feet = ft // 12
            self.inches = ft % 12
    def __str__(self):
        return str(self.feet) + " Feet " + str(self.inches) + " Inches"
    def __repr__(self):
        return "Height (" + str(self.feet * 12 + self.inches) + ")"

我试过想把英寸初始化为0会有所帮助,但是没有用.元组也不支持索引,因此选项也不存在.我觉得答案很简单,我只是在思考它.我正在使用的测试代码是:

from height import *
def test(ht):
    """tests the __str__, __repr__, and to_feet methods for the height
   Height->None"""
    #print("In inches: " + str(ht.to_inches()))
    #print("In feet and inches: " + str(ht.to_feet_and_inches()))
    print("Convert to string: " + str(ht))
    print("Internal representation: " + repr(ht))
    print()
print("Creating ht1: Height(5,6)...")
ht1 = Height(5,6)
test(ht1)
print("Creating ht2: Height(4,13)...")
ht2 = Height(4,13)
test(ht2)
print("Creating ht3: Height(50)...")
ht3 = Height(50)
test(ht3)

当输入int时,我的代码按预期工作,但是,当输入元组时,我似乎无法弄明白.有任何想法吗?

解决方法:

你真的被传递了一个元组吗?在我看来,你的构造函数应该只是:

def __init__(self, ft, inch=0):
   self.ft = int(ft)
   self.inch = int(inch)

如果您使用其中任何一个创建对象(因为您具有inch参数的默认值),则该方法有效:

foo = Height(6)
bar = Height(6, 3)
baz = Height("5", 3)

请注意,在第二个和第三个实例中,您仍然没有传递元组.为了实际接收元组,你需要像这样调用它:

foo2 = Height((6, 3))

或在构造函数声明中使用’*’运算符.

上一篇:无法理解一些python元组语法


下一篇:DELPHI下的SOCK编程(转)