1

I am a Python noob.

I create a class as follows:

class t1:
    x = ''
    def __init__(self, x):
        self.x = x

class t2:
    y = ''
    z = ''
    def __init__(self, x, y, z):
        self.y = t1.__init__(x)
        self.z = z

Now contrary to C++ or Java, I do not bind the data type to y while writing the class definition. It is only because the constructor code is such that it shows that y is of type t1. Can we bind a data type while declaring y?

Rohit Banga
  • 18,458
  • 31
  • 113
  • 191

2 Answers2

6

No. Variables in Python do not have types - y does not have a type. At any moment in time, y refers to an object, and that object has a type. This:

y = ''

binds y to an object of type str. You can change it later to refer to an object of a different type. y itself has no intrinsic type.

See Fredrik Lundh's excellent "Reset your brain" article for further explanation.

(By the way, this: self.y = t1.__init__(x) is a rather strange piece of code. Did you mean to say self.y = t1(x)?)

RichieHindle
  • 272,464
  • 47
  • 358
  • 399
3

It's out of the scope, but please note:

class A(object):
    x = None

In this context, x is a class variable, not an instance variable and is shared by each instance. It's commonly used in the borg pattern.

class A(object):
    def __init__(self, x):
        self.y = None
        self.x = x

Here, self.y and self.x are instance variables.

Community
  • 1
  • 1
dzen
  • 6,923
  • 5
  • 28
  • 31