【发布时间】:2013-07-08 23:32:39
【问题描述】:
我想在 python 中为一堆与此类似的子类声明类级变量:Static class variables in Python。我了解到shared 属性可能是我想要使用的,但我不太确定在哪里使用它。
这是我的情况:我正在为一个游戏(100 多个)制作一堆不同的角色类型。所有字符类型都具有相同的属性集,因此我创建了一个包含所有属性和所需内部变量的基类。每个字符类型都有一组不可变的属性,这些属性对于给定字符类型的每个实例完全相同,但在字符类型之间有所不同。我想在子类(每个字符类型一个子类)中包含不可变字符类型属性作为类“变量”,就像上面对 python 示例的答案一样。
关键是我想引用一些属性而不必创建子类的实例。
我的问题是我无法弄清楚需要共享什么才能正确执行此操作,或者我的代码需要如何组织才能实现此目的。我尝试共享属性,这最终允许我从子类获取属性,而不仅仅是子类的实例,但它不会返回我使用Shared 或Shared Shadows 在子类中分配的属性.我想将属性保留在基类中,这样我就不必为每个子类复制和粘贴相同的属性。
这是我的一些代码示例:
Public MustInherit Class Char
'IMMUTABLE INFORMATION
' CharType Traits
Shared _ID As Integer
Shared _Species As String
Public Shared ReadOnly Property Species As String
Get
Return _Species
End Get
End Property
End Class
Public Class CharCat
Inherits Char
Shared Shadows _Species = "Cat"
End Class
目标是能够输入CharCat.Species 并让它返回"Cat"。我知道这个例子对于类名是多余的,但对于其他属性却不是。
【问题讨论】:
-
我不会调用类
Char,因为它是保留字 -
“我想将属性保留在基类中,这样我就不必为每个子类复制和粘贴相同的属性。”无论如何,您必须将变量声明复制并粘贴到每个类中。另外,如果属性是只读的,那么它真的需要它后面的私有变量吗?为什么不只为每个子类型返回适当的字符串?
-
@Idle_Mind,我更希望代码更短且更易于阅读。如果可能的话,最好让每个子类的每个属性/变量集都有一行。 NoAlias 的解决方案在下面有效,如果每个字符类型每个属性需要 5 行,那么每个字符类型每个属性需要 5 行是我必须使用的,但如果我可以浓缩它,我很乐意。