【发布时间】:2014-01-08 02:48:10
【问题描述】:
所以,我有两个 Person 类的实例,我正在尝试进行一些比较。 sun是每个实例的几个属性之一,由两个随机生成的数字定义。我有以下问题......创建像Match 这样的子类是建立这种比较的正确方法吗?我想要一个在比较结束时编译的overall“分数”,我可以在没有for循环的情况下这样做吗?
Person1 = Person("Person1")
Person2 = Person("Person2")
class Match(Person):
overall = 0
def __init__(self, Person1, Person2):
self.Person1 = Person1
self.Person2 = Person2
def suns (self):
if abs(Person1.sun - Person2.sun) == 2 or 4 or 8 or 10:
overall += 4
elif abs(Person1.sun - Person2.sun) == 3 or 9:
overall -= 6
elif abs(Person1.sun - Person2.sun) == 6:
overall += 3
else:
overall += 0
print Match.overall
编辑 为了澄清我正在尝试做的事情......我对占星术出生图兼容性服务的工作原理有一些基本的了解,只是为了好玩和练习,我想运行该程序的一个非常基本的版本。目前,所有数据都是随机生成的,不需要用户输入。这是 Person 类的样子
from random import randint
from decimal import Decimal
def randomDecimal(a,b):
return (randint(int(a), int(100.0 * b)))/100.0
class Person:
def __init__(self, name):
self.name=name
self.sun = (randomDecimal(1, 12), randomDecimal(0, 30))
self.moon = (randomDecimal(1, 12), randomDecimal(0, 30))
self.mercury = (randomDecimal(1, 12), randomDecimal(0, 30))
self.venus = (randomDecimal(1, 12), randomDecimal(0, 30))
self.mars = (randomDecimal(1, 12), randomDecimal(0, 30))
def printer(self):
print "your Sun is in %f, at %f degrees" % (self.sun[0], self.sun[1])
print "your Moon is in %f, at %f degrees" % (self.moon[0], self.moon[1])
#and so on and so forth for the printer
【问题讨论】:
-
你的问题是非常开放的,有很多不同的方法。 IMO,我会使用一个需要两个人的简单函数。
-
为什么
Match是Person的子类? -
是在“足球比赛”的上下文中使用的“比赛”,其中两个人互相比赛,还是比较两个人的“约会比赛”?您需要添加更多上下文来解释您在此处尝试执行的操作。
-
@LegoStormtroopr 认为“约会匹配”。
-
@alKid 我想比较两个实例的属性,但不知道该怎么做。
标签: python class comparison subclassing