2014-11-24 3 views
-1

У меня есть два файла: main.py и ColorPoint.py. Последний состоит из класса Point и класса ColorPoint, унаследованного от Point класса. Есть ли способ получить доступ к методам Point из файла main.py?Доступ к родительским методам в python

Например, у меня есть два метода: __str__ в Point и ColorPoint классы. Но я хочу, чтобы напечатать colorpoint объект как только Point:

print colorpoint # gives output from Point class, not ColorPoint class 

Я знаю, как получить доступ родительских методов из класса через super, но как сделать то же самое с main, а не из класса?

+5

Это необычная просьба - вы можете дать немного больше Информатио n на то, что вы пытаетесь достичь, возможно, есть лучший способ сделать то, что вы пытаетесь ... –

+0

'Point .__ str __ (colorpoint)'? – Rusty

+0

Расти, да - именно то, что я хотел !!! – ovod

ответ

1

Вы ищете the thingy formerly known as unbound methods.

В python, когда вы вызываете метод через класс, «self» автоматически не привязан (как он должен знать, в каком экземпляре работать?), Вы должны передать его самому. И это «я» не обязательно должно быть фактическим экземпляром класса.

Так что вы можете сделать:

>>> class A(object): 
... def __repr__(self): 
...  return "I'm A's __repr__ operating on a " + self.__class__.__name__ 
... 
>>> class B(A): 
... def __repr__(self): 
...  return "I'm B's __repr__" 
... 
>>> b=B() 
>>> b 
I'm B's __repr__ 
>>> A.__repr__(b) 
"I'm A's __repr__ operating on a B" 

И чтобы полностью удовлетворить ваши спецификации, вы можете также узнать родительский класс, методы вызова программно во время выполнения, например, как так (не безопасная реализация, только для образовательных целей, сломается на более сложные настройки, не используйте sometig как это в производстве, это ужасный код, disclaimerdisclaimerdisclaimer):

>>> b.__class__.__base__.__repr__(b) 
"I'm A's __repr__ operating on a B"