Getting this to work similar to self in Python

2015-07-22 Thread nurfz via Digitalmars-d-learn

How could I get this D code to work similar to this Python code?

So, here is the D code:

import std.stdio;

class Vehicle {
int speed;
void printSpeed() {
writeln(this.speed);
}
}

class Airplane: Vehicle {
int speed = 100;
}

int main() {
auto v = new Vehicle();
auto a = new Airplane();

v.printSpeed();  // 0
a.printSpeed(); // 0 not 100

writeln(v.speed); // 0
writeln(a.speed); // 100
}

Here is the Python code:

class Vehicle:
speed = 0
def printSpeed(self):
print(self.speed)

class Airplane(Vehicle):
speed = 100

if __name__ == __main__:
v = Vehicle()
a = Airplane()

v.printSpeed()  # 0
a.printSpeed()  # 100

print(v.speed)  # 0
print(a.speed)  # 100

I guess I'm confused as to why the D code isn't acting similar to 
the Python code in the sense that you would expect this to 
reference the speed property of the current instance and not 
statically reference the parent.  Am I having these issues 
because these attributes are being initialized statically?


Would using constructors be the way to go about this? I suppose 
I'm just trying to find a way to implement fairly clean and 
intuitive object oriented inheritance that isn't crippled by 
getters/setters, is resolved at compile time, and doesn't impose 
any kind of runtime cost other than what you would assume is 
associated with fundamental level OOP.


Sorry for the long winded post, but this has just been confusing 
me to no end.  Hopefully you guys can help me out! :)


Re: Getting this to work similar to self in Python

2015-07-22 Thread nurfz via Digitalmars-d-learn
Hmm, is there a specific reason aside from the encapsulation 
violation?  It seems needlessly complicated.  If you have 
someone/something that has direct access to your source code, 
isn't a getter/setter the least of your concerns?  Does the 
@property decorator incur a large runtime cost?