我从str和int类中对两个对象进行了子分类,并向其中添加了一个revert方法,该方法可以将一个对象转换为另一个对象:
class newString(str):
...
...
def revert(self, distance, obj):
self = newInt(self)
class newInt(int):
...
...
def revert(self):
self = newString(self)
a = newInt(2)
a.revert()
print(type(a))
#output
<class "newString">
我知道“self”关键字不能这样使用,但我这样说是为了举例说明。我希望对象能够将自身更改为另一个,这是否可能,而不必在“revert”方法中使用return语句?因为如果我使用return语句,这意味着我必须再次将返回的对象分配回,语法如下:
class newString(str):
...
...
def revert(self):
new = newInt(self)
return new
class newInt(int):
...
...
def revert(self):
new = newInt(self)
return new
a = newInt(2)
a = a.revert()
print(type(a))
#output
<class "newString">
这对我来说总是有点笨拙,谢谢;)
我所尝试的: 我试着通过引用来模拟传递;例如:
class newString(str):
...
...
def revert(self, obj):
obj[0] = newInt(obj[0])
class newInt(int):
...
...
def revert(self, obj):
obj[0] = newInt(obj[0])
a = newInt(2)
a.revert([a])
print(type(a))
#output
<class "newString">
但还是很笨拙。因为在将变量传递给方法之前,我必须将其包装在一个列表中,以使其可变。非常感谢您的帮助,谢谢
我不会从兔子洞里钻下去。即使重新分配给
self
会起作用,调试和维护也将是一场噩梦我会使用classmethods来允许从一种类型创建另一种类型。分配回并不比在引擎盖下秘密更改类型更笨拙
classmethods是从Python中另一种类型的对象创建某种类型对象的惯用方法。对于Python不支持构造函数重载(或者任何方法重载)这一事实,它本质上是一种“变通方法”
显式比隐式好
这不是对象的工作方式
self
是对对象的引用。即使在函数范围内更改它,也不是对对象本身的更改。您应该了解更多关于面向对象编程的知识,什么是对象以及为什么不应该动态更改其类型但是,您可以使用
@staticmethod
和@staticmethod
注释的静态或类方法,这些方法可以返回从所需类型创建的新对象或者另一个选项是创建一个类似
to_mystr
的方法,该方法对给定对象进行操作,并返回从对象创建的对象(转换为其他类型)相关问题 更多 >
编程相关推荐