【问题标题】:What is a partial class?什么是部分类?
【发布时间】:2008-11-17 14:24:32
【问题描述】:

在 C# 中是什么以及如何使用它。
你能在 Python/Perl 中使用相同的概念吗?

【问题讨论】:

    标签: c# python oop programming-languages


    【解决方案1】:

    partial type(它不必是一个类;结构和接口也可以是部分的)基本上是一种单一类型,其代码分布在多个文件中。

    这样做的主要用途是允许代码生成器(例如 Visual Studio 设计人员)“拥有”一个文件,而将手写代码放在另一个文件中。

    恐怕我不知道 Python/Perl 是否具有相同的功能。

    【讨论】:

    • 没有编译器,因此在 Python 中没有紧密匹配。有抽象类,不能有意义地使用;子类是完成它们的常用方法。或者你总是可以在缺少的功能中进行猴子补丁:-(
    • 在 python 中不直接支持,但你可以通过将一个作为另一个的基类来破解它。我的班级(MyClassPartial)。这可能就是 S.Lott 所说的“抽象类”。方案 b:使用装饰器:@MyClassPartialFun\nclass MyClass(object)
    • Jon Skeet 不知道?宇宙刚刚抛出了一个异常。
    • 当您使用某些工具自动生成代码时,部分类会派上用场。您可以将逻辑放在部分类中。即使自动生成的文件被销毁并重新创建,您的逻辑也会保留在部分类中。
    【解决方案2】:

    这里已经解释了 c# 部分类,所以我将只介绍 python 部分。您可以使用多重继承来优雅地分配类的定义。

    class A_part1:
        def m1(self):
            print "m1"
    
    class A_part2:
        def m2(self):
            print "m2"
    
    class A(A_part1, A_part2):
        pass
    
    a = A()
    a.m1()
    a.m2()
    

    【讨论】:

    • 比其他答案中的猴子补丁方法要好得多。 +1
    【解决方案3】:

    分部类只是包含在多个文件中的类。有时是这样,一个部分可以由机器生成,而另一部分可以由用户编辑。

    当我创建一个有点太大的类时,我在 C# 中使用它们。我会将访问器和构造器放在一个文件中,所有有趣的方法放在另一个文件中。

    在 Perl 中,您只需拥有两个(或更多)文件,每个文件都声明自己位于一个包中:

    (主程序)

        use MyClass;
    

    (在 MyClass.pm 中)

        use MyClassOtherStuff;
        package MyClass;
        # [..class code here...]
    

    (在 MyClassOtherStuff.pm 中)

        package MyClass;
        # [...rest of code here...]
    

    【讨论】:

      【解决方案4】:

      部分类型的概念已经解释过了。

      这可以在 python 中完成。例如,在 python shell 中执行以下操作。

      class A(object):
          pass
      
      obj = A()
      
      def _some_method(self):
          print self.__class__
      A.identify = _some_method
      
      obj.identify()
      

      【讨论】:

      • 这将是猴子补丁。
      【解决方案5】:

      因为 python 是一种动态语言,所以您不需要像偏类这样的概念。在 python 中,可以在运行时扩展具有功能的对象,因此可以将类声明分解为不同的文件

      【讨论】:

        【解决方案6】:

        Partial 类型是其声明在多个文件中分隔的类型。如果您有一个大类(对于典型的开发人员来说很难处理和阅读),那么使用它们是有意义的,将类定义分隔在单独的文件中,并在每个文件中放入逻辑上分隔的代码部分(例如所有公共方法和属性在一个文件中,私有在另一个文件中,db 处理代码在第三个文件中,依此类推..)

        不,您在 Python 中没有相同的语法元素。

        【讨论】:

          【解决方案7】:

          Python 也有元类,但它更像是一个模板类而不是部分类。使用元类的一个很好的例子是 Django ORM。您的所有表模型都继承自一个基模型类,该基模型类也从元类中获取功能。这是一个非常酷的概念,可以启用类似模式的活动记录(它是完整的活动记录吗?)。

          【讨论】:

            【解决方案8】:

            当您通过某些工具拥有auto-generated code 时,部分类会派上用场。以问题Project structure for Schema First Service Development using WCF为例。

            您可以将您的逻辑放在部分类中。即使自动生成的文件被销毁并重新创建,您的逻辑也会保留在部分类中。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-07-29
              • 2018-02-18
              • 2010-10-01
              • 1970-01-01
              • 2010-11-17
              • 2011-04-21
              • 1970-01-01
              • 2018-04-16
              相关资源
              最近更新 更多