【问题标题】:How to or is it necessary to define types of attributes in a class in python如何或是否有必要在 python 中的类中定义属性类型
【发布时间】:2019-09-21 04:26:02
【问题描述】:

我是 python 的新手,我对类中属性的类型有一些疑问。根据 C 语言的经验,我觉得你应该总是在创建变量时定义它的类型,但在 Python 中似乎不是。

我正在尝试创建一个具有 3 个属性的类。在 Pycharm 中使用 Python 3.7。

一种方法是这样做

class Solution:
        next: int
        f_star: tuple
        t_star: list

另一种方式是这样的

class Solution:
    def __init__(self,):
        self.next = int
        self.f_star = tuple
       self.t_star = list

但它们都没有真正将属性限制为相应的类型。我仍然可以执行说

node = Solution
node.t_star = 5

然后我运行它以在分配新值之前测试属性的类型。所以我这样做了:

node = Solution
print(type(node.next))

在第一种情况下,它正确返回类型 但在第二种情况下,它说

AttributeError: type object 'Solution' has no attribute 'f_star'.

谁能解释一下为什么会有这样的区别以及定义类的两种方式有什么区别。

以及如何或者是否需要在python中定义一个类的属性类型?

【问题讨论】:

    标签: python-3.x class types attributes


    【解决方案1】:

    Python 的主要观点之一,一方面是为了让初学者更容易,也为了更容易阅读,是你不需要声明变量类型。它有“鸭子打字”(google it),并且不是静态类型的。同一个变量实际上可以从整数变成浮点数再变成字符串,这有缺点也有优点。

    【讨论】:

    • 谢谢,我发现python被称为编程语言的动态类型,但是这两种定义属性的方式有什么区别,为什么会产生这样的结果?
    • 你到底在说什么区别?你的问题给出了相同的类名,很难理解。还有,next 是 Python 中的关键字,不要命名属性 next。
    • 不给node.next设置值,如果我简单地运行'node = Solution print(type(node.next))',第一种类型的定义会正确返回类型 但在第二种情况下(使用 init 的情况),它说 AttributeError: type object 'Solution' has no attribute 'f_star'。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多