0

I want to do a generic class in Python with one method

  • This class does not generate its instances
  • Some attributes are set in the body of the class
  • Method of this class uses the set attributes and in the generated classes the output of this method depends on these attributes
  • Method has only one input

I know that without metaclasses will not do, but I do not know how to apply them :)

something like this:

class GenericClass:
  attr_a = ''
  attr_b = ''
  def count(text):
    return len(text)/attr_a + attr_b

class A(GenericClass):
  attr_a = 2
  attr_b = 1

text = "Hello, I'm under the water"
print(A.count(text))
# 14
  • What do you mean by "This class does not generate its instances"? That it should be impossible to create instances of it? – Jack Taylor Dec 21 '22 at 09:45
  • Yes, exactly, but I know how to do it more or less – Adam Nowakowski Dec 21 '22 at 09:59
  • It definitely sounds like you want `@classmethod`. You will still be able to instantiate classes that use this, but `@classmethod` will do most of what you want. If you also want to stop people from instantiating the class, you could also raise an error inside the `__init__` method. – Jack Taylor Dec 22 '22 at 01:28

2 Answers2

1

Defining count as a class method would make that work:

@classmethod
def count(cls, text):
    return len(text) / cls.attr_a + cls.attr_b
deceze
  • 510,633
  • 85
  • 743
  • 889
0
class GenericClass:
    def _count(text, a, b):
        return len(text)/a + b

class A(GenericClass):
    attr_a = 2
    attr_b = 1

    def count(text):
        return GenericClass._count(text, A.attr_a, A.attr_b)
    
text = "Hello, I'm under the water"
print(A.count(text))
cionzo
  • 428
  • 1
  • 5
  • 12