Предизвикателства > She's a witch! > Решения > Решението на Филип Филчев

Резултати
0 точки от тестове
0 точки от учител

0 точки общо

0 успешни теста
1 неуспешни теста
Код

 1# Jokes aside
 2def logic_mixin_factory(mass, mass_attr_name, material, material_attr_name, float_method_name):
 3    """Returns a class that has a method is_a_witch that returns True if the class has the passed in attributes"""
 4    class Witch:
 5        """A Mixin that sets all the attributes and methods passed in to the factory."""
 6        def __init__(self):
 7            setattr(self, mass_attr_name, mass)
 8            setattr(self, material_attr_name, material)
 9            setattr(self, float_method_name, lambda _: print('this is indeed a method'))
10
11        def is_a_witch(self):
12            """Returns True if the class has the passed in attributes and methods."""
13            if isinstance(self, Witch):
14                return "Burn her!"
15
16            try:
17                if (getattr(self, mass_attr_name) != mass or
18                        getattr(self, material_attr_name) != material or
19                        not callable(getattr(self, float_method_name))):
20                    return "No, but it's a pity, cuz she looks like a witch!"
21            except AttributeError:
22                return "No, but it's a pity, cuz she looks like a witch!"
23
24            return "Burn her!"
25
26    return Witch

F
======================================================================
FAIL: test_realcase (test.TestWitchMixinFactory)
Real test for the Witch factory.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 30, in test_realcase
self.assertEqual(Nothing().is_a_witch(), self.RESULT_FALSE)
AssertionError: 'Burn her!' != "No, but it's a pity, cuz she looks like a witch!"
- Burn her!
+ No, but it's a pity, cuz she looks like a witch!

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (failures=1)

Дискусия
Георги Кунчев
08.11.2023 22:24

Ок, ок, сега разбрах :smile:, но имай предвид, че ако нещо наследява вещица, то винаги ще е вещица. Не искам в стремежа си да направиш яка шега, което вече е факт, да се спънеш.
Филип Филчев
08.11.2023 21:49

Ах шегата е, че каквото е None ще принти Java. Ама това може и да ми чупи решенито 😂 А за стрнговете да, забравих ги. От що се мъчех да натамъня шегата
Георги Кунчев
08.11.2023 21:41

Объркан съм от това решение. Дори не виждам стринговете, които сме дефинирали, че трябва да връщаш. И не, това не е хейт, защото си кръстил класа си `Java`. Този факт го оценявам :smile:
История

tt1# Jokes aside
1def logic_mixin_factory(mass, mass_attr_name, material, material_attr_name, float_method_name):2def logic_mixin_factory(mass, mass_attr_name, material, material_attr_name, float_method_name):
2    """Returns a class that has a method is_a_witch that returns True if the class has the passed in attributes"""3    """Returns a class that has a method is_a_witch that returns True if the class has the passed in attributes"""
3    class Witch:4    class Witch:
4        """A Mixin that sets all the attributes and methods passed in to the factory."""5        """A Mixin that sets all the attributes and methods passed in to the factory."""
5        def __init__(self):6        def __init__(self):
6            setattr(self, mass_attr_name, mass)7            setattr(self, mass_attr_name, mass)
7            setattr(self, material_attr_name, material)8            setattr(self, material_attr_name, material)
8            setattr(self, float_method_name, lambda _: print('this is indeed a method'))9            setattr(self, float_method_name, lambda _: print('this is indeed a method'))
910
10        def is_a_witch(self):11        def is_a_witch(self):
11            """Returns True if the class has the passed in attributes and methods."""12            """Returns True if the class has the passed in attributes and methods."""
12            if isinstance(self, Witch):13            if isinstance(self, Witch):
13                return "Burn her!"14                return "Burn her!"
1415
15            try:16            try:
16                if (getattr(self, mass_attr_name) != mass or17                if (getattr(self, mass_attr_name) != mass or
17                        getattr(self, material_attr_name) != material or18                        getattr(self, material_attr_name) != material or
18                        not callable(getattr(self, float_method_name))):19                        not callable(getattr(self, float_method_name))):
19                    return "No, but it's a pity, cuz she looks like a witch!"20                    return "No, but it's a pity, cuz she looks like a witch!"
20            except AttributeError:21            except AttributeError:
21                return "No, but it's a pity, cuz she looks like a witch!"22                return "No, but it's a pity, cuz she looks like a witch!"
2223
23            return "Burn her!"24            return "Burn her!"
2425
25    return Witch26    return Witch
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op

f1def logic_mixin_factory(mass, mass_attr_name, material, material_attr_name, float_method_name):f1def logic_mixin_factory(mass, mass_attr_name, material, material_attr_name, float_method_name):
2    """Returns a class that has a method is_a_witch that returns True if the class has the passed in attributes"""2    """Returns a class that has a method is_a_witch that returns True if the class has the passed in attributes"""
3    class Witch:3    class Witch:
4        """A Mixin that sets all the attributes and methods passed in to the factory."""4        """A Mixin that sets all the attributes and methods passed in to the factory."""
5        def __init__(self):5        def __init__(self):
6            setattr(self, mass_attr_name, mass)6            setattr(self, mass_attr_name, mass)
7            setattr(self, material_attr_name, material)7            setattr(self, material_attr_name, material)
8            setattr(self, float_method_name, lambda _: print('this is indeed a method'))8            setattr(self, float_method_name, lambda _: print('this is indeed a method'))
99
10        def is_a_witch(self):10        def is_a_witch(self):
11            """Returns True if the class has the passed in attributes and methods."""11            """Returns True if the class has the passed in attributes and methods."""
tt12            if isinstance(self, Witch):
13                return "Burn her!"
14 
12            try:15            try:
13                if (getattr(self, mass_attr_name) != mass or16                if (getattr(self, mass_attr_name) != mass or
14                        getattr(self, material_attr_name) != material or17                        getattr(self, material_attr_name) != material or
15                        not callable(getattr(self, float_method_name))):18                        not callable(getattr(self, float_method_name))):
16                    return "No, but it's a pity, cuz she looks like a witch!"19                    return "No, but it's a pity, cuz she looks like a witch!"
17            except AttributeError:20            except AttributeError:
18                return "No, but it's a pity, cuz she looks like a witch!"21                return "No, but it's a pity, cuz she looks like a witch!"
1922
20            return "Burn her!"23            return "Burn her!"
2124
22    return Witch25    return Witch
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op

f1def logic_mixin_factory(mass, mass_attr_name, material, material_attr_name, float_method_name):f1def logic_mixin_factory(mass, mass_attr_name, material, material_attr_name, float_method_name):
2    """Returns a class that has a method is_a_witch that returns True if the class has the passed in attributes"""2    """Returns a class that has a method is_a_witch that returns True if the class has the passed in attributes"""
n3    class Java:n3    class Witch:
4        """A Mixin that sets all the attributes and methods passed in to the factory.4        """A Mixin that sets all the attributes and methods passed in to the factory."""
5        Otherwise, set them to Java. :)
6        """
7        def __init__(self):5        def __init__(self):
n8            setattr(self, mass_attr_name or 'camelCaseJavaAttribute', mass or 'java')n6            setattr(self, mass_attr_name, mass)
9            setattr(self, material_attr_name or 'camelCaseJavaAttribute', material or 'java')7            setattr(self, material_attr_name, material)
10            setattr(self, float_method_name or 'camelCaseJavaMethod', self.camelCaseJavaMethod)8            setattr(self, float_method_name, lambda _: print('this is indeed a method'))
11 
12        def camelCaseJavaMethod(self):
13            """Prints Java if the method name is not passed in, otherwise prints Python."""
14            print('Java' if not float_method_name else 'Python')
159
16        def is_a_witch(self):10        def is_a_witch(self):
17            """Returns True if the class has the passed in attributes and methods."""11            """Returns True if the class has the passed in attributes and methods."""
n18            if (not hasattr(self, float_method_name) andn12            try:
19                    not hasattr(self, mass_attr_name) and13                if (getattr(self, mass_attr_name) != mass or
20                    not hasattr(self, material_attr_name)):14                        getattr(self, material_attr_name) != material or
15                        not callable(getattr(self, float_method_name))):
21                return "No, but it's a pity, cuz she looks like a witch!"16                    return "No, but it's a pity, cuz she looks like a witch!"
22 17            except AttributeError:
23            if (getattr(self, mass_attr_name) != mass or
24                    getattr(self, material_attr_name) != material or
25                    not callable(getattr(self, float_method_name))):
26                return "No, but it's a pity, cuz she looks like a witch!"18                return "No, but it's a pity, cuz she looks like a witch!"
2719
28            return "Burn her!"20            return "Burn her!"
2921
t30    return Javat22    return Witch
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op

f1def logic_mixin_factory(mass, mass_attr_name, material, material_attr_name, float_method_name):f1def logic_mixin_factory(mass, mass_attr_name, material, material_attr_name, float_method_name):
2    """Returns a class that has a method is_a_witch that returns True if the class has the passed in attributes"""2    """Returns a class that has a method is_a_witch that returns True if the class has the passed in attributes"""
3    class Java:3    class Java:
4        """A Mixin that sets all the attributes and methods passed in to the factory.4        """A Mixin that sets all the attributes and methods passed in to the factory.
5        Otherwise, set them to Java. :)5        Otherwise, set them to Java. :)
6        """6        """
7        def __init__(self):7        def __init__(self):
8            setattr(self, mass_attr_name or 'camelCaseJavaAttribute', mass or 'java')8            setattr(self, mass_attr_name or 'camelCaseJavaAttribute', mass or 'java')
9            setattr(self, material_attr_name or 'camelCaseJavaAttribute', material or 'java')9            setattr(self, material_attr_name or 'camelCaseJavaAttribute', material or 'java')
10            setattr(self, float_method_name or 'camelCaseJavaMethod', self.camelCaseJavaMethod)10            setattr(self, float_method_name or 'camelCaseJavaMethod', self.camelCaseJavaMethod)
1111
12        def camelCaseJavaMethod(self):12        def camelCaseJavaMethod(self):
13            """Prints Java if the method name is not passed in, otherwise prints Python."""13            """Prints Java if the method name is not passed in, otherwise prints Python."""
14            print('Java' if not float_method_name else 'Python')14            print('Java' if not float_method_name else 'Python')
1515
16        def is_a_witch(self):16        def is_a_witch(self):
17            """Returns True if the class has the passed in attributes and methods."""17            """Returns True if the class has the passed in attributes and methods."""
18            if (not hasattr(self, float_method_name) and18            if (not hasattr(self, float_method_name) and
19                    not hasattr(self, mass_attr_name) and19                    not hasattr(self, mass_attr_name) and
20                    not hasattr(self, material_attr_name)):20                    not hasattr(self, material_attr_name)):
21                return "No, but it's a pity, cuz she looks like a witch!"21                return "No, but it's a pity, cuz she looks like a witch!"
2222
23            if (getattr(self, mass_attr_name) != mass or23            if (getattr(self, mass_attr_name) != mass or
24                    getattr(self, material_attr_name) != material or24                    getattr(self, material_attr_name) != material or
25                    not callable(getattr(self, float_method_name))):25                    not callable(getattr(self, float_method_name))):
26                return "No, but it's a pity, cuz she looks like a witch!"26                return "No, but it's a pity, cuz she looks like a witch!"
2727
28            return "Burn her!"28            return "Burn her!"
2929
30    return Java30    return Java
t31 t
32 
33Mixin = logic_mixin_factory(1, 'mass', 'wood', 'material', 'float_method_name')
34 
35class Deriv(Mixin):
36    pass
37 
38d = Deriv()
39 
40print(d.is_a_witch())
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op

f1def logic_mixin_factory(mass, mass_attr_name, material, material_attr_name, float_method_name):f1def logic_mixin_factory(mass, mass_attr_name, material, material_attr_name, float_method_name):
2    """Returns a class that has a method is_a_witch that returns True if the class has the passed in attributes"""2    """Returns a class that has a method is_a_witch that returns True if the class has the passed in attributes"""
3    class Java:3    class Java:
4        """A Mixin that sets all the attributes and methods passed in to the factory.4        """A Mixin that sets all the attributes and methods passed in to the factory.
5        Otherwise, set them to Java. :)5        Otherwise, set them to Java. :)
6        """6        """
7        def __init__(self):7        def __init__(self):
8            setattr(self, mass_attr_name or 'camelCaseJavaAttribute', mass or 'java')8            setattr(self, mass_attr_name or 'camelCaseJavaAttribute', mass or 'java')
9            setattr(self, material_attr_name or 'camelCaseJavaAttribute', material or 'java')9            setattr(self, material_attr_name or 'camelCaseJavaAttribute', material or 'java')
10            setattr(self, float_method_name or 'camelCaseJavaMethod', self.camelCaseJavaMethod)10            setattr(self, float_method_name or 'camelCaseJavaMethod', self.camelCaseJavaMethod)
1111
12        def camelCaseJavaMethod(self):12        def camelCaseJavaMethod(self):
13            """Prints Java if the method name is not passed in, otherwise prints Python."""13            """Prints Java if the method name is not passed in, otherwise prints Python."""
14            print('Java' if not float_method_name else 'Python')14            print('Java' if not float_method_name else 'Python')
1515
16        def is_a_witch(self):16        def is_a_witch(self):
17            """Returns True if the class has the passed in attributes and methods."""17            """Returns True if the class has the passed in attributes and methods."""
18            if (not hasattr(self, float_method_name) and18            if (not hasattr(self, float_method_name) and
19                    not hasattr(self, mass_attr_name) and19                    not hasattr(self, mass_attr_name) and
20                    not hasattr(self, material_attr_name)):20                    not hasattr(self, material_attr_name)):
n21                return Falsen21                return "No, but it's a pity, cuz she looks like a witch!"
2222
23            if (getattr(self, mass_attr_name) != mass or23            if (getattr(self, mass_attr_name) != mass or
24                    getattr(self, material_attr_name) != material or24                    getattr(self, material_attr_name) != material or
25                    not callable(getattr(self, float_method_name))):25                    not callable(getattr(self, float_method_name))):
n26                return Falsen26                return "No, but it's a pity, cuz she looks like a witch!"
2727
n28            return Truen28            return "Burn her!"
2929
30    return Java30    return Java
tt31 
32 
33Mixin = logic_mixin_factory(1, 'mass', 'wood', 'material', 'float_method_name')
34 
35class Deriv(Mixin):
36    pass
37 
38d = Deriv()
39 
40print(d.is_a_witch())
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op

f1def logic_mixin_factory(mass, mass_attr_name, material, material_attr_name, float_method_name):f1def logic_mixin_factory(mass, mass_attr_name, material, material_attr_name, float_method_name):
2    """Returns a class that has a method is_a_witch that returns True if the class has the passed in attributes"""2    """Returns a class that has a method is_a_witch that returns True if the class has the passed in attributes"""
3    class Java:3    class Java:
4        """A Mixin that sets all the attributes and methods passed in to the factory.4        """A Mixin that sets all the attributes and methods passed in to the factory.
5        Otherwise, set them to Java. :)5        Otherwise, set them to Java. :)
6        """6        """
7        def __init__(self):7        def __init__(self):
8            setattr(self, mass_attr_name or 'camelCaseJavaAttribute', mass or 'java')8            setattr(self, mass_attr_name or 'camelCaseJavaAttribute', mass or 'java')
9            setattr(self, material_attr_name or 'camelCaseJavaAttribute', material or 'java')9            setattr(self, material_attr_name or 'camelCaseJavaAttribute', material or 'java')
10            setattr(self, float_method_name or 'camelCaseJavaMethod', self.camelCaseJavaMethod)10            setattr(self, float_method_name or 'camelCaseJavaMethod', self.camelCaseJavaMethod)
1111
12        def camelCaseJavaMethod(self):12        def camelCaseJavaMethod(self):
13            """Prints Java if the method name is not passed in, otherwise prints Python."""13            """Prints Java if the method name is not passed in, otherwise prints Python."""
14            print('Java' if not float_method_name else 'Python')14            print('Java' if not float_method_name else 'Python')
1515
16        def is_a_witch(self):16        def is_a_witch(self):
17            """Returns True if the class has the passed in attributes and methods."""17            """Returns True if the class has the passed in attributes and methods."""
18            if (not hasattr(self, float_method_name) and18            if (not hasattr(self, float_method_name) and
19                    not hasattr(self, mass_attr_name) and19                    not hasattr(self, mass_attr_name) and
20                    not hasattr(self, material_attr_name)):20                    not hasattr(self, material_attr_name)):
21                return False21                return False
2222
23            if (getattr(self, mass_attr_name) != mass or23            if (getattr(self, mass_attr_name) != mass or
24                    getattr(self, material_attr_name) != material or24                    getattr(self, material_attr_name) != material or
25                    not callable(getattr(self, float_method_name))):25                    not callable(getattr(self, float_method_name))):
26                return False26                return False
2727
28            return True28            return True
2929
30    return Java30    return Java
t31 t
32 
33mixin = logic_mixin_factory('mass', 'mass_attr_name', 'material', 'material_attr_name', 'float_method_name')
34 
35class MixinClass(mixin):
36    pass
37 
38class NotMixinClass:
39    pass
40 
41M = NotMixinClass()
42m = MixinClass()
43M.__setattr__('float_method_name', m.float_method_name)
44M.__setattr__('is_a_witch', m.is_a_witch)
45 
46print(m.material_attr_name)
47m.float_method_name()
48 
49print(M.is_a_witch())
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op

f1def logic_mixin_factory(mass, mass_attr_name, material, material_attr_name, float_method_name):f1def logic_mixin_factory(mass, mass_attr_name, material, material_attr_name, float_method_name):
2    """Returns a class that has a method is_a_witch that returns True if the class has the passed in attributes"""2    """Returns a class that has a method is_a_witch that returns True if the class has the passed in attributes"""
3    class Java:3    class Java:
nn4        """A Mixin that sets all the attributes and methods passed in to the factory.
5        Otherwise, set them to Java. :)
6        """
4        def __init__(self):7        def __init__(self):
n5            setattr(self, mass_attr_name, mass)n8            setattr(self, mass_attr_name or 'camelCaseJavaAttribute', mass or 'java')
6            setattr(self, material_attr_name, material)9            setattr(self, material_attr_name or 'camelCaseJavaAttribute', material or 'java')
7            setattr(self, float_method_name, self.java)10            setattr(self, float_method_name or 'camelCaseJavaMethod', self.camelCaseJavaMethod)
811
n9        def java(self):n12        def camelCaseJavaMethod(self):
10            print('java')13            """Prints Java if the method name is not passed in, otherwise prints Python."""
14            print('Java' if not float_method_name else 'Python')
1115
12        def is_a_witch(self):16        def is_a_witch(self):
nn17            """Returns True if the class has the passed in attributes and methods."""
13            if (not hasattr(self, float_method_name) and18            if (not hasattr(self, float_method_name) and
14                    not hasattr(self, mass_attr_name) and19                    not hasattr(self, mass_attr_name) and
15                    not hasattr(self, material_attr_name)):20                    not hasattr(self, material_attr_name)):
16                return False21                return False
1722
18            if (getattr(self, mass_attr_name) != mass or23            if (getattr(self, mass_attr_name) != mass or
19                    getattr(self, material_attr_name) != material or24                    getattr(self, material_attr_name) != material or
20                    not callable(getattr(self, float_method_name))):25                    not callable(getattr(self, float_method_name))):
21                return False26                return False
2227
23            return True28            return True
2429
25    return Java30    return Java
tt31 
32 
33mixin = logic_mixin_factory('mass', 'mass_attr_name', 'material', 'material_attr_name', 'float_method_name')
34 
35class MixinClass(mixin):
36    pass
37 
38class NotMixinClass:
39    pass
40 
41M = NotMixinClass()
42m = MixinClass()
43M.__setattr__('float_method_name', m.float_method_name)
44M.__setattr__('is_a_witch', m.is_a_witch)
45 
46print(m.material_attr_name)
47m.float_method_name()
48 
49print(M.is_a_witch())
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op