PyCharm Edu 2018.2 Help

Pull Members Up, Push Members Down

Basics

The Pull Members Up refactoring allows you to move class members to a superclass.

Pull Members Up refactoring can create abstract methods. If a project makes use of the interpreter Python 2.x, then only the instance methods can be abstracted. If a project uses Python 3.x, then any method can be abstracted.

Note that PyCharm Edu automatically adds import statements, required for abstract methods.

The Push Members Down refactoring helps clean up the class hierarchy by moving class members to a subclass. The members are then relocated into the direct subclasses only.

Pulling members up

  1. Select the class to be moved to a superclass.
  2. On the context menu, choose Refactor | Pull Members Up. The Pull Members Up dialog box appears.
  3. Select the destination object (superclass).
  4. In the Members section, select the members you want to move.
  5. To move a method as abstract, select the checkbox in the column Make abstract next to the method in question.
  6. Click Refactor to pull the selected members to their destination.

Example

BeforeAfter
class SuperClass: def super_method(self): pass class SubClassOne(SuperClass): def my_method(self): pass
class SuperClass: def super_method(self): pass def my_method(self): pass class SubClassOne(SuperClass): pass
class Bar(object): pass class SomeClass (Bar): def foo(self): pass
from abc import abstractmethod, ABCMeta class Bar(object): __metaclass__ = ABCMeta @abstractmethod def foo(self): pass class SomeCLass (Bar): def foo (self): pass

Pushing members down

  1. In the editor, open the class whose members you need to push down.
  2. On the context menu, choose Refactor | Push Members Down. Push Members Down dialog box displays the list of members to be pushed down.
  3. In the Members to be pushed down area, select the members you want to move. Note that the member at caret is already selected.

    If pushing a member might cause problems, you will be notified with red highlighting. It means that, if the situation is unattended, an error will emerge after refactoring. PyCharm Edu prompts you with a Problems Detected dialog, where you can opt to ignore or fix the problem.

  4. Preview and apply changes.

Example

BeforeAfter
class SuperClass: def super_method(self): pass class SubClassOne(SuperClass): def my_method(self): pass class SubClassTwo(SuperClass): def my_method(self): pass
class SuperClass: pass class SubClassOne(SuperClass): def my_method(self): pass def super_method(self): pass class SubClassTwo(SuperClass): def my_method(self): pass def super_method(self): pass
Last modified: 9 August 2018

See Also