当前位置: 首页 > 知识库问答 >
问题:

在Python中初始化的条件类型

冯泓
2023-03-14

我正试图编写我自己的“分数”类,它包含两个数字对象:分子和分母。但是,根据这两个参数的数据类型,我希望对象以不同的方式初始化。

例如,如果我声明x=Frac(2,5)我希望x保持Frac类型。然而,如果我声明y=Frac(2.1,5)我希望y被转换为float,值为0.42,而不是Frac(21,50)

这样做的正确方式是什么?

这感觉非常类似于具有单个对象的元组只返回原始对象的场景。这意味着x=(“cat”)x设置为str类型,而不是tuple类型。

共有1个答案

焦兴为
2023-03-14

有两种选择。

x = Frac.create_by_type(2, 5)
y = Frac.create_by_type(2.1, 5)

实现实例:

class Frac:
    ...
    @classmethod
    def create_by_type(cls, a, b):
        if isinstance(a, float):
            return a / b
        return cls(a, b)

如果您想直接使用Frac构造函数,

class Frac:
    def __new__(cls, a, b):
        if isinstance(a, float):
            return a / b
        return super().__new__(cls)

    def __init__(self, a, b):
        self.a = a
        self.b = b


f1 = Frac(2, 5)
f2 = Frac(2.1, 5)

print(type(f1))
print(type(f2))
print(f1.a, f1.b)

输出:

<class '__main__.Frac'>
<class 'float'>
2 5

但是重写\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu新的方法可能会很棘手,所以我不确定推荐它。

 类似资料:
  • 问题内容: 我最近刚与Python中的一个错误作斗争。那是那些愚蠢的新手错误之一,但是它让我思考了Python的机制(我是C ++的老程序员,是Python的新手)。我将列出错误的代码并解释如何解决该问题,然后我有两个问题。 场景:我有一个叫做A的类,它有一个字典数据成员,下面是其代码(当然这是简化的): 使用此代码的类为B类: 请注意,每次调用都会初始化类A的新“干净”实例,并在添加前后打印字典

  • 问题内容: 我在python中初始化2D数组时遇到问题。我想要一个6x6的阵列,我做到了 但是当我这样做时: 注意,我只设置了1个项目,并且在所有行上都设置了“ replicated”。怎么了?我认为它与引用相同的列表有关,但是我该如何解决呢? 我估计 可以,但是初始化一个空的6x6数组似乎很长,如果我想要10000x10000数组怎么办,效率会很低? 更新 我还可以初始化2D数组的字典吗?我有一

  • 我找不到任何关于这个具体案例的具体SO帖子,所以我想问一下我认为是/否的问题。 以下是JLS§12.4.2(Java SE 8),清单6-7: 我的问题是:这是否意味着子类的final static变量在超类的静态初始化之前初始化(假设final static作为其声明的一部分初始化)?

  • 问题内容: 我正在寻找类似于Objective-C的class方法的行为,因为该方法在类初始化时被调用一次,此后不再被调用。 一个简单的闭合将非常时尚!而且很显然,当我们在结构闭包中使用“ s”而不是“ s”时,这一切都将非常匹配! 问题答案: 如果您有一个Objective-C类,最简单的方法就是重写。但是,请确保您的类的 子 类也被覆盖,否则您的类的 子 类可能会被多次调用!如果需要,可以使用

  • 类初始化规则规定:如果由于访问静态字段而触发类初始化,则只初始化声明了静态字段的类,即使静态字段被子类、子接口的类型或接口的实现类引用,也不会触发超类或子类的初始化。然后在下面的代码中,只应打印“初始化超类”。 } 当我运行这个时,输出:

  • 我正在尝试使用Spring开发Rest代码。 我的MongoDAO类如下所示 但我得到的错误是.. 原因:org . spring framework . beans . factory . beancreationexception:创建在文件[C:\ Users \ user \ Desktop \ ITAU \ 77 \ ABC-iCOE-WAL \ ItauBankingTransac s