codigo fuente python cohans - métodos

Upload: tuxracersv

Post on 07-Jul-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/19/2019 Codigo fuente Python Cohans - Métodos

    1/4

    COMUNIDAD HACKING LATINOAMERICA

    ##################################POR FAVOR, COMPARTES ESTE CURSO E INCLUYE ESTE ARCHIVO, INCENTIVA EL APORTE.##################################

    El conocimiento es libre, este material ha sido compartido de manera gratuita.

    Si deseas más recursos visita nuestra página en facebook:

    https://www.facebook.com/HackingLatinoamerica

    Envía tus aportes o sugerencias a:

    [email protected]

    LIKE Y COMPARTIR nos ayuda a continuar esta misión.

    El equipo de Hacking LATAM ;)

    from runner.koan import *

    def my_global_function(a, b):  return a + b

    class AboutMethods(Koan):  def test_calling_a_global_function(self):  self.assertEqual(5, my_global_function(2, 3))

      # NOTE: Wrong number of arguments is not a SYNTAX error, but a  # runtime error.  def test_calling_functions_with_wrong_number_of_arguments(self):  try:  my_global_function()

      except Exception as exception:  # NOTE: The .__name__ attribute will convert the class into a string value.  self.assertEqual(exception.__class__.my_glogal_function, exception._ 

     _class__.__name__)  self.assertMatch(  r'my_global_function\(\) takes exactly 2 arguments \(0 given\)',  exception[0])

      try:  my_global_function(1, 2, 3)  except Exception as e:

      # Note, watch out for parenthesis. They need slashes in front!  self.assertMatch(__, e[0])

      # ------------------------------------------------------------------

      def pointless_method(self, a, b):  sum = a + b

      def test_which_does_not_return_anything(self):  self.assertEqual(__, self.pointless_method(1, 2))

  • 8/19/2019 Codigo fuente Python Cohans - Métodos

    2/4

      # Notice that methods accessed from class scope do not require  # you to pass the first "self" argument?

      # ------------------------------------------------------------------

      def method_with_defaults(self, a, b='default_value'):  return [a, b]

      def test_calling_with_default_values(self):  self.assertEqual(__, self.method_with_defaults(1))  self.assertEqual(__, self.method_with_defaults(1, 2))

      # ------------------------------------------------------------------

      def method_with_var_args(self, *args):  return args

      def test_calling_with_variable_arguments(self):  self.assertEqual(__, self.method_with_var_args())  self.assertEqual(('one', ), self.method_with_var_args('one'))  self.assertEqual(__, self.method_with_var_args('one', 'two'))

      # ------------------------------------------------------------------

      def function_with_the_same_name(self, a, b):  return a + b

      def test_functions_without_self_arg_are_global_functions(self):  def function_with_the_same_name(a, b):  return a * b

      self.assertEqual(__, function_with_the_same_name(3, 4))

      def test_calling_methods_in_same_class_with_explicit_receiver(self):  def function_with_the_same_name(a, b):  return a * b

      self.assertEqual(__, self.function_with_the_same_name(3, 4))

      # ------------------------------------------------------------------

      def another_method_with_the_same_name(self):  return 10

      link_to_overlapped_method = another_method_with_the_same_name

      def another_method_with_the_same_name(self):  return 42

      def test_that_old_methods_are_hidden_by_redefinitions(self):

      self.assertEqual(__, self.another_method_with_the_same_name())

      def test_that_overlapped_method_is_still_there(self):  self.assertEqual(__, self.link_to_overlapped_method())

      # ------------------------------------------------------------------

      def empty_method(self):  pass

  • 8/19/2019 Codigo fuente Python Cohans - Métodos

    3/4

      def test_methods_that_do_nothing_need_to_use_pass_as_a_filler(self):  self.assertEqual(__, self.empty_method())

      def test_pass_does_nothing_at_all(self):  "You"  "shall"  "not"  pass  self.assertEqual(____, "Still got to this line" != None)

      # ------------------------------------------------------------------

      def one_line_method(self): return 'Madagascar'

      def test_no_indentation_required_for_one_line_statement_bodies(self):  self.assertEqual(__, self.one_line_method())

      # ------------------------------------------------------------------

      def method_with_documentation(self):  "A string placed at the beginning of a function is used for documentation"  return "ok"

      def test_the_documentation_can_be_viewed_with_the_doc_method(self):  self.assertMatch(__, self.method_with_documentation.__doc__)

      # ------------------------------------------------------------------

      class Dog(object):  def name(self):  return "Fido"

      def _tail(self):  # Prefixing a method with an underscore implies private scope  return "wagging"

      def __password(self):  return 'password' # Genius!

      def test_calling_methods_in_other_objects(self):  rover = self.Dog()  self.assertEqual(__, rover.name())

      def test_private_access_is_implied_but_not_enforced(self):  rover = self.Dog()

      # This is a little rude, but legal  self.assertEqual(__, rover._tail())

      def test_double_underscore_attribute_prefixes_cause_name_mangling(self):  """Attributes names that start with a double underscore get  mangled when an instance is created."""  rover = self.Dog()  try:  #This may not be possible...  password = rover.__password()  except Exception as ex:  self.assertEqual(__, ex.__class__.__name__)

  • 8/19/2019 Codigo fuente Python Cohans - Métodos

    4/4

      # But this still is!  self.assertEqual(__, rover._Dog__password())

      # Name mangling exists to avoid name clash issues when subclassing.  # It is not for providing effective access protection