【发布时间】:2008-11-17 14:24:32
【问题描述】:
在 C# 中是什么以及如何使用它。
你能在 Python/Perl 中使用相同的概念吗?
【问题讨论】:
标签: c# python oop programming-languages
在 C# 中是什么以及如何使用它。
你能在 Python/Perl 中使用相同的概念吗?
【问题讨论】:
标签: c# python oop programming-languages
partial type(它不必是一个类;结构和接口也可以是部分的)基本上是一种单一类型,其代码分布在多个文件中。
这样做的主要用途是允许代码生成器(例如 Visual Studio 设计人员)“拥有”一个文件,而将手写代码放在另一个文件中。
恐怕我不知道 Python/Perl 是否具有相同的功能。
【讨论】:
这里已经解释了 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()
【讨论】:
分部类只是包含在多个文件中的类。有时是这样,一个部分可以由机器生成,而另一部分可以由用户编辑。
当我创建一个有点太大的类时,我在 C# 中使用它们。我会将访问器和构造器放在一个文件中,所有有趣的方法放在另一个文件中。
在 Perl 中,您只需拥有两个(或更多)文件,每个文件都声明自己位于一个包中:
(主程序)
use MyClass;
(在 MyClass.pm 中)
use MyClassOtherStuff;
package MyClass;
# [..class code here...]
(在 MyClassOtherStuff.pm 中)
package MyClass;
# [...rest of code here...]
【讨论】:
部分类型的概念已经解释过了。
这可以在 python 中完成。例如,在 python shell 中执行以下操作。
class A(object):
pass
obj = A()
def _some_method(self):
print self.__class__
A.identify = _some_method
obj.identify()
【讨论】:
因为 python 是一种动态语言,所以您不需要像偏类这样的概念。在 python 中,可以在运行时扩展具有功能的对象,因此可以将类声明分解为不同的文件
【讨论】:
Partial 类型是其声明在多个文件中分隔的类型。如果您有一个大类(对于典型的开发人员来说很难处理和阅读),那么使用它们是有意义的,将类定义分隔在单独的文件中,并在每个文件中放入逻辑上分隔的代码部分(例如所有公共方法和属性在一个文件中,私有在另一个文件中,db 处理代码在第三个文件中,依此类推..)
不,您在 Python 中没有相同的语法元素。
【讨论】:
Python 也有元类,但它更像是一个模板类而不是部分类。使用元类的一个很好的例子是 Django ORM。您的所有表模型都继承自一个基模型类,该基模型类也从元类中获取功能。这是一个非常酷的概念,可以启用类似模式的活动记录(它是完整的活动记录吗?)。
【讨论】:
当您通过某些工具拥有auto-generated code 时,部分类会派上用场。以问题Project structure for Schema First Service Development using WCF为例。
您可以将您的逻辑放在部分类中。即使自动生成的文件被销毁并重新创建,您的逻辑也会保留在部分类中。
【讨论】: