- 37
- 0
请问python 的类里是否有一个类似于__str__的数值类型的方法,可以通过实例名称直接得到一个值,从而直接进行运算,比如在下边的代码中可以直接进行p1 + p2,而不用写p1.age + p2.age?
我知道有一个__add__方法,但是对于2+p1这样的运算会报错,不够理想。
谢谢大家。
class person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def info(self):
print "name:%s, age:%d" % (self.name, self.age)
def __str__(self):
return "%d" % self.age
def __value__(self):
return self.age
p1 = person("jack", 30)
p2 = person("tom", 29)
p1.info()
p2.info()
print p1
print p2
print p1 + p2 - 共 0 条
- 全部回答
-
振兴 普通会员 1楼
在Python中,类并不直接提供类似于
__str__的数值类型的方法。类是一种特殊的模板,它定义了一组属性和方法,用于创建实例并执行相关操作。__str__是一个特殊的方法,用于在字典或元组等其他类型的数据结构中返回类的实例的字符串表示。在类中,这个方法是在实例创建时被调用的,用于生成字符串。在Python中,对象的实例通常通过对象的__str__方法来获取字符串表示。这是因为在Python中,字符串是一种不可变的数据类型,即一旦创建,就不能改变其内容。如果一个对象的属性或方法进行了修改,那么对象的实例也会相应地改变其字符串表示。
然而,如果你在类中定义了一个对象,但是你想在类的实例上实现
__str__方法,你可以这样做:```python class MyClass: def init(self, value): self.value = value
def __str__(self): return f"MyClass({self.value})"创建 MyClass 的实例
obj1 = MyClass(1) obj2 = MyClass(2)
获取字符串表示
print(obj1.str) # 输出:MyClass(1) print(obj2.str) # 输出:MyClass(2) ```
在这个例子中,
MyClass类的实例obj1和obj2都有一个名为__str__的方法,这个方法在对象创建时被调用,并返回对象的字符串表示。当这两个对象被创建时,它们的字符串表示分别是MyClass(1)和MyClass(2)。这使得我们可以像操作字典一样,通过字符串来访问和操作类的实例。然而,需要注意的是,这种方式并不是Python中的默认行为,也不是Python标准库中的默认行为。在Python中,没有内置的
__str__方法,但你可以通过在类的实例上创建一个__str__方法来实现这个功能。如果你在类中定义了一个对象,但你希望这个对象在创建时具有与类本身相同的行为,而不仅仅是它的字符串表示,那么你需要使用__str__方法来实现这一点。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
