2015-06-01 2 views
-2

Предположим, у меня есть два класса, построенных из метода конструктора. Могу ли я получить доступ к переменным этих классов, указав функцию снаружи? Пример:Доступ к переменной вне класса

class MyCat1(): 
    def __init__(self, weight1, speed1): 
    self.weight1 = ... 
    self.speed1 = ... 

class MyCat2(): 
    def __init__(self, weight2, speed2): 
    self.weight2 = ... 
    self.speed2 = ... 

def run(self, weight1, weight2, speed1, speed2): 
    self.sum = weight1.speed1+ weight2.speed2 
    x = self.sum 
    return x 
+0

Нет, вы получаете * атрибуты экземпляра * через * экземпляр класса *. Что именно вы на самом деле пытаетесь сделать? – jonrsharpe

+0

Это не отвечает на ваш вопрос, но нет смысла писать два отдельных класса, которые идентичны, за исключением имен атрибутов. Почему бы не иметь один класс «MyCat», который имеет атрибуты «weight» и «speed», номера не требуются? Конечно, вы можете сделать несколько экземпляров одного класса. – Kevin

+0

Это просто пример. Мой вопрос в том, могу ли я определить два класса для двух отдельных объектов и определить функцию, которая будет иметь атрибуты из обоих классов и которая находится за пределами обоих классов? – sparrow

ответ

2

Я думаю, что это ближе к тому, что вы стреляете. Вам просто нужно определить ваш class один раз, тогда вы можете сделать столько экземпляров, сколько захотите.

class MyCat(): 
    def __init__(self, weight, speed): 
     self.weight = weight 
     self.speed = speed 

Это бесплатная функция, и поэтому не имеет self, так что вы можете просто передать в случаях MyCat работать. Вы можете вызвать атрибуты weight и speed экземпляров.

def run(cat1, cat2): 
    return cat1.weight * cat1.speed + cat2.weight * cat2.speed 

Например

>>> cat1 = MyCat(5, 10) 
>>> cat2 = MyCat(3, 5) 
>>> run(cat1, cat2) 
65 
2

Я сделал бы один класс Cat и держать метод в классе и передавать экземпляры методы:

class Cat(object): 
    def __init__(self, weight, speed): 
     self.weight = weight 
     self.speed = speed 

    def run(self,other): 
     return self.weight * other.weight + self.speed * other.speed 

cat1 = Cat(2, 2) 
cat2 = Cat(3, 3) 

print(cat1.run(cat2)) 
12 

Там нет смысла Создания почти одинаковые классы, и было бы довольно сложно, если вы решили иметь 100 кошек.

Смежные вопросы