java为什么python选择根据设置的时间访问不同的成员(静态成员或实例成员)
我来自经典的面向对象编程世界——Java、C#等,我一直在摆弄一些基本的python东西。我编写了以下基本代码:
class MyClass:
def createInstanceMember(self):
self.member = "instance member"
def createClassMember(self):
MyClass.member = "class member"
def printMember(self):
print(self.member)
def printStaticMember(self):
print(MyClass.member)
现在,当我做以下工作时:
myObj = MyClass()
myObj.createClassMember()
myObj.printMember()
myObj.createInstanceMember()
myObj.printMember()
myObj.createClassMember()
myObj.printMember()
myObj.printStaticMember()
它打印这个:
class member
instance member
instance member
class member
但当我这么做的时候:
myObj.createInstanceMember()
myObj.printMember()
myObj.createClassMember()
myObj.printMember()
myObj.printStaticMember()
它打印:
instance member
instance member
class member
在这里,当我首先调用createInstanceMember()
时,printMember()
永远不能打印类成员。只要不调用createInstanceMember()
,它就可以打印类成员。所以,尽管我理解为什么会发生这种行为,但我觉得它有点奇怪,从语言设计的角度来看有些不一致为什么某些变量引用应该根据其他语句的执行顺序访问不同的内存位置是否有任何特定的原因/设计选择,为什么python设计师选择这样做?还是我把它解释得完全错了
PS:在经典的OOP语言中,比如在Java中,情况并非如此。在这里,静态成员的操作非常不同,尽管更加一致(或者只是我的大脑指示Java的行为更加一致)。在Java中,实例和静态成员不能同名
共 (0) 个答案