【问题标题】:How do I explicitly specify that a variable is an instance of a particular class? [duplicate]如何明确指定变量是特定类的实例? [复制]
【发布时间】:2021-12-20 14:56:45
【问题描述】:

共有三个等级(A、B、C)。 A 类是 master,使用 B 类和 C 类的一些数据。B 类使用 C 类的数据,C 类的一个实例通过 A 传递给 B。

示例代码如下()

a.py

from b import SomeB
from c import SomeC

class SomeA(object):
    def __init__(self):
        self.object_c = SomeC()
        self.object_b = SomeB(self.object_c)

        self.some_work_with_obj_c_data()
        self.some_work_with_obj_b_data()

    def some_work_with_obj_c_data(self):
        self.object_c.some_var_for_a += 1
        print(self.object_c.some_var_for_a)

    def some_work_with_obj_b_data(self):
        self.object_b.some_var_for_a += 1
        print(self.object_b.some_var_for_a)


if __name__ == "__main__":
    object_a = SomeA()

b.py

class SomeB(object):
    def __init__(self, object_c_from_a):
        self.some_var_for_a = 5678
        self.object_c_from_a = object_c_from_a  # an instance of the SomeC class from C.py
        self.some_work_with_obj_c_data()

    def some_work_with_obj_c_data(self):
        self.object_c_from_a.some_var_for_b += 1
        print(self.object_c_from_a.some_var_for_b)

c.py

class SomeC(object):
    def __init__(self):
        self.some_var_for_b = 1234
        self.some_var_for_a = 4321

在实际情况下,它是两个 GUI 窗口(A 和 B),以及一些数据处理程序 (C)。

基本上,B 类没有明确指定我们正在处理的数据类型(特别是如果您没有指定注释)。 IDE 中也没有自动完成代码(例如 PyCharm)。

是否有一种机制可以指定变量是对特定类实例的引用?还是有一个更全球性的架构问题,原则上不应该存在?

【问题讨论】:

标签: python python-3.x class oop


【解决方案1】:

在 python 中你没有静态类型,这是你想要的。相反,变量是动态类型的。

解决问题的关键是为变量命名。例如,如果变量名为 amount_of_songs,您可以推断它是一个数字。其他类型也一样。

python中使用的主要方法叫duck typing

鸭子类型是一个与动态类型相关的概念,其中对象的类型或类不如它定义的方法重要。当您使用鸭子类型时,您根本不检查类型。相反,您检查给定方法或属性是否存在。

编辑:也许我错过了这个问题:你只是想在函数中添加类型提示吗?那么这将是typing in python

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-10
    • 2010-11-22
    • 2018-04-30
    • 1970-01-01
    • 2020-12-10
    • 2018-08-22
    • 2021-10-25
    • 2013-04-21
    相关资源
    最近更新 更多