Passing Variables to Class Attributes
I've two files, one of which is a python (2.7) file with a class defined. I know how to create instances and the differences between class attributes and instance attributes. I know that upon creation of any instance, you pass variables based on what's defined in the constructor. But I'd like to pass a variable from the other file into my python file as a class attribute, not an instance attribute. Is this possible?
File #1 (Python 2.7):
class Controller:
"""
counter is my desired class attribute. But here, python
tells me GRID is not defined.
"""
counter = (GRID ** 2) # Gives a NameError.
def __init__(self, WIDTH, HEIGHT, GRID):
"""I'd like GRID to be a variable that's read from another file."""
self.WIDTH = WIDTH
self.HEIGHT = HEIGHT
self.GRID = GRID
File #2 ("Master" file to hold all constants and magic numbers):
WIDTH = 500
HEIGHT = 500
GRID = 4
controller = Controller(WIDTH, HEIGHT, GRID) # New Controller object.
When I try to define counter
as a formula based on variable GRID
, I get a NameError: GRID is not defined
. Is there a way that I can define a class attribute -- counter
in this case -- in terms of a variable?
Obviously I could just write counter = 4 ** 2
, but I'd like to keep all constants and magic numbers in a single file, so I can update them only in one file as necessary.
python class
add a comment |
I've two files, one of which is a python (2.7) file with a class defined. I know how to create instances and the differences between class attributes and instance attributes. I know that upon creation of any instance, you pass variables based on what's defined in the constructor. But I'd like to pass a variable from the other file into my python file as a class attribute, not an instance attribute. Is this possible?
File #1 (Python 2.7):
class Controller:
"""
counter is my desired class attribute. But here, python
tells me GRID is not defined.
"""
counter = (GRID ** 2) # Gives a NameError.
def __init__(self, WIDTH, HEIGHT, GRID):
"""I'd like GRID to be a variable that's read from another file."""
self.WIDTH = WIDTH
self.HEIGHT = HEIGHT
self.GRID = GRID
File #2 ("Master" file to hold all constants and magic numbers):
WIDTH = 500
HEIGHT = 500
GRID = 4
controller = Controller(WIDTH, HEIGHT, GRID) # New Controller object.
When I try to define counter
as a formula based on variable GRID
, I get a NameError: GRID is not defined
. Is there a way that I can define a class attribute -- counter
in this case -- in terms of a variable?
Obviously I could just write counter = 4 ** 2
, but I'd like to keep all constants and magic numbers in a single file, so I can update them only in one file as necessary.
python class
It makes no sense to take GRID as parameter, when at the same time it’s supposed to be a predefined constant. Define counter to be an INSTANCE variable instead and be happy.
– deets
Nov 22 '18 at 23:17
You just need animport
statement to use a constant in another module
– Robin Zigmond
Nov 22 '18 at 23:22
@deets Well I've other files (.py modules) that need to read the same exactcounter
-- like a global variable, so if I putcounter
as an instance attribute, how can other modules read/write the samecounter
? Wouldn't there be separatecounter
instances in every module, every time I create aController
object in my other modules?
– WaterGuy
Nov 22 '18 at 23:48
Then pass the one object around.
– deets
Nov 23 '18 at 0:06
add a comment |
I've two files, one of which is a python (2.7) file with a class defined. I know how to create instances and the differences between class attributes and instance attributes. I know that upon creation of any instance, you pass variables based on what's defined in the constructor. But I'd like to pass a variable from the other file into my python file as a class attribute, not an instance attribute. Is this possible?
File #1 (Python 2.7):
class Controller:
"""
counter is my desired class attribute. But here, python
tells me GRID is not defined.
"""
counter = (GRID ** 2) # Gives a NameError.
def __init__(self, WIDTH, HEIGHT, GRID):
"""I'd like GRID to be a variable that's read from another file."""
self.WIDTH = WIDTH
self.HEIGHT = HEIGHT
self.GRID = GRID
File #2 ("Master" file to hold all constants and magic numbers):
WIDTH = 500
HEIGHT = 500
GRID = 4
controller = Controller(WIDTH, HEIGHT, GRID) # New Controller object.
When I try to define counter
as a formula based on variable GRID
, I get a NameError: GRID is not defined
. Is there a way that I can define a class attribute -- counter
in this case -- in terms of a variable?
Obviously I could just write counter = 4 ** 2
, but I'd like to keep all constants and magic numbers in a single file, so I can update them only in one file as necessary.
python class
I've two files, one of which is a python (2.7) file with a class defined. I know how to create instances and the differences between class attributes and instance attributes. I know that upon creation of any instance, you pass variables based on what's defined in the constructor. But I'd like to pass a variable from the other file into my python file as a class attribute, not an instance attribute. Is this possible?
File #1 (Python 2.7):
class Controller:
"""
counter is my desired class attribute. But here, python
tells me GRID is not defined.
"""
counter = (GRID ** 2) # Gives a NameError.
def __init__(self, WIDTH, HEIGHT, GRID):
"""I'd like GRID to be a variable that's read from another file."""
self.WIDTH = WIDTH
self.HEIGHT = HEIGHT
self.GRID = GRID
File #2 ("Master" file to hold all constants and magic numbers):
WIDTH = 500
HEIGHT = 500
GRID = 4
controller = Controller(WIDTH, HEIGHT, GRID) # New Controller object.
When I try to define counter
as a formula based on variable GRID
, I get a NameError: GRID is not defined
. Is there a way that I can define a class attribute -- counter
in this case -- in terms of a variable?
Obviously I could just write counter = 4 ** 2
, but I'd like to keep all constants and magic numbers in a single file, so I can update them only in one file as necessary.
python class
python class
asked Nov 22 '18 at 23:10
WaterGuyWaterGuy
426
426
It makes no sense to take GRID as parameter, when at the same time it’s supposed to be a predefined constant. Define counter to be an INSTANCE variable instead and be happy.
– deets
Nov 22 '18 at 23:17
You just need animport
statement to use a constant in another module
– Robin Zigmond
Nov 22 '18 at 23:22
@deets Well I've other files (.py modules) that need to read the same exactcounter
-- like a global variable, so if I putcounter
as an instance attribute, how can other modules read/write the samecounter
? Wouldn't there be separatecounter
instances in every module, every time I create aController
object in my other modules?
– WaterGuy
Nov 22 '18 at 23:48
Then pass the one object around.
– deets
Nov 23 '18 at 0:06
add a comment |
It makes no sense to take GRID as parameter, when at the same time it’s supposed to be a predefined constant. Define counter to be an INSTANCE variable instead and be happy.
– deets
Nov 22 '18 at 23:17
You just need animport
statement to use a constant in another module
– Robin Zigmond
Nov 22 '18 at 23:22
@deets Well I've other files (.py modules) that need to read the same exactcounter
-- like a global variable, so if I putcounter
as an instance attribute, how can other modules read/write the samecounter
? Wouldn't there be separatecounter
instances in every module, every time I create aController
object in my other modules?
– WaterGuy
Nov 22 '18 at 23:48
Then pass the one object around.
– deets
Nov 23 '18 at 0:06
It makes no sense to take GRID as parameter, when at the same time it’s supposed to be a predefined constant. Define counter to be an INSTANCE variable instead and be happy.
– deets
Nov 22 '18 at 23:17
It makes no sense to take GRID as parameter, when at the same time it’s supposed to be a predefined constant. Define counter to be an INSTANCE variable instead and be happy.
– deets
Nov 22 '18 at 23:17
You just need an
import
statement to use a constant in another module– Robin Zigmond
Nov 22 '18 at 23:22
You just need an
import
statement to use a constant in another module– Robin Zigmond
Nov 22 '18 at 23:22
@deets Well I've other files (.py modules) that need to read the same exact
counter
-- like a global variable, so if I put counter
as an instance attribute, how can other modules read/write the same counter
? Wouldn't there be separate counter
instances in every module, every time I create a Controller
object in my other modules?– WaterGuy
Nov 22 '18 at 23:48
@deets Well I've other files (.py modules) that need to read the same exact
counter
-- like a global variable, so if I put counter
as an instance attribute, how can other modules read/write the same counter
? Wouldn't there be separate counter
instances in every module, every time I create a Controller
object in my other modules?– WaterGuy
Nov 22 '18 at 23:48
Then pass the one object around.
– deets
Nov 23 '18 at 0:06
Then pass the one object around.
– deets
Nov 23 '18 at 0:06
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53438947%2fpassing-variables-to-class-attributes%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53438947%2fpassing-variables-to-class-attributes%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
It makes no sense to take GRID as parameter, when at the same time it’s supposed to be a predefined constant. Define counter to be an INSTANCE variable instead and be happy.
– deets
Nov 22 '18 at 23:17
You just need an
import
statement to use a constant in another module– Robin Zigmond
Nov 22 '18 at 23:22
@deets Well I've other files (.py modules) that need to read the same exact
counter
-- like a global variable, so if I putcounter
as an instance attribute, how can other modules read/write the samecounter
? Wouldn't there be separatecounter
instances in every module, every time I create aController
object in my other modules?– WaterGuy
Nov 22 '18 at 23:48
Then pass the one object around.
– deets
Nov 23 '18 at 0:06