How to create class attribute that is an alteration of the same class attribute
I have the following class:
@dataclass
class thing:
DATE: datetime.datetime
BEG_DATE: datetime.datetime = self.DATE.replace(day=1))
But I get this error:
NameError("name 'DATE' is not defined")
Visual Studio points to line 4 where I'm trying to define BEG_DATE.
1) Why?
2) How can I create the attribute BEG_DATE
that takes the DATE
attribute and just changes the day to 1?
I've tried field(default_factory=self.DATE.replace(day=1))
, but I got the same error.
python python-3.7
add a comment |
I have the following class:
@dataclass
class thing:
DATE: datetime.datetime
BEG_DATE: datetime.datetime = self.DATE.replace(day=1))
But I get this error:
NameError("name 'DATE' is not defined")
Visual Studio points to line 4 where I'm trying to define BEG_DATE.
1) Why?
2) How can I create the attribute BEG_DATE
that takes the DATE
attribute and just changes the day to 1?
I've tried field(default_factory=self.DATE.replace(day=1))
, but I got the same error.
python python-3.7
@stovfl it is valid Python. Read up on post-init processing
– Joel
Nov 12 '18 at 15:12
@Joel: Thank you for pointing that out.
– stovfl
Nov 12 '18 at 15:16
add a comment |
I have the following class:
@dataclass
class thing:
DATE: datetime.datetime
BEG_DATE: datetime.datetime = self.DATE.replace(day=1))
But I get this error:
NameError("name 'DATE' is not defined")
Visual Studio points to line 4 where I'm trying to define BEG_DATE.
1) Why?
2) How can I create the attribute BEG_DATE
that takes the DATE
attribute and just changes the day to 1?
I've tried field(default_factory=self.DATE.replace(day=1))
, but I got the same error.
python python-3.7
I have the following class:
@dataclass
class thing:
DATE: datetime.datetime
BEG_DATE: datetime.datetime = self.DATE.replace(day=1))
But I get this error:
NameError("name 'DATE' is not defined")
Visual Studio points to line 4 where I'm trying to define BEG_DATE.
1) Why?
2) How can I create the attribute BEG_DATE
that takes the DATE
attribute and just changes the day to 1?
I've tried field(default_factory=self.DATE.replace(day=1))
, but I got the same error.
python python-3.7
python python-3.7
edited Nov 12 '18 at 15:22
Joel
1,5726719
1,5726719
asked Nov 12 '18 at 7:00
Jarrod
971110
971110
@stovfl it is valid Python. Read up on post-init processing
– Joel
Nov 12 '18 at 15:12
@Joel: Thank you for pointing that out.
– stovfl
Nov 12 '18 at 15:16
add a comment |
@stovfl it is valid Python. Read up on post-init processing
– Joel
Nov 12 '18 at 15:12
@Joel: Thank you for pointing that out.
– stovfl
Nov 12 '18 at 15:16
@stovfl it is valid Python. Read up on post-init processing
– Joel
Nov 12 '18 at 15:12
@stovfl it is valid Python. Read up on post-init processing
– Joel
Nov 12 '18 at 15:12
@Joel: Thank you for pointing that out.
– stovfl
Nov 12 '18 at 15:16
@Joel: Thank you for pointing that out.
– stovfl
Nov 12 '18 at 15:16
add a comment |
1 Answer
1
active
oldest
votes
For fields that depend on the values of other fields, you need to take advantage of Post-init processing. The way you're doing it now, Python is trying to evaluate self.DATE.replace(day=1)
when the class is created, rather than when the instance is created.
from dataclasses import dataclass, field
@dataclass
class thing:
DATE: datetime.datetime
BEG_DATE: datetime.datetime = field(init=False)
def __post_init__(self):
self.BEG_DATE = self.DATE.replace(day=1))
add a comment |
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%2f53257247%2fhow-to-create-class-attribute-that-is-an-alteration-of-the-same-class-attribute%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
For fields that depend on the values of other fields, you need to take advantage of Post-init processing. The way you're doing it now, Python is trying to evaluate self.DATE.replace(day=1)
when the class is created, rather than when the instance is created.
from dataclasses import dataclass, field
@dataclass
class thing:
DATE: datetime.datetime
BEG_DATE: datetime.datetime = field(init=False)
def __post_init__(self):
self.BEG_DATE = self.DATE.replace(day=1))
add a comment |
For fields that depend on the values of other fields, you need to take advantage of Post-init processing. The way you're doing it now, Python is trying to evaluate self.DATE.replace(day=1)
when the class is created, rather than when the instance is created.
from dataclasses import dataclass, field
@dataclass
class thing:
DATE: datetime.datetime
BEG_DATE: datetime.datetime = field(init=False)
def __post_init__(self):
self.BEG_DATE = self.DATE.replace(day=1))
add a comment |
For fields that depend on the values of other fields, you need to take advantage of Post-init processing. The way you're doing it now, Python is trying to evaluate self.DATE.replace(day=1)
when the class is created, rather than when the instance is created.
from dataclasses import dataclass, field
@dataclass
class thing:
DATE: datetime.datetime
BEG_DATE: datetime.datetime = field(init=False)
def __post_init__(self):
self.BEG_DATE = self.DATE.replace(day=1))
For fields that depend on the values of other fields, you need to take advantage of Post-init processing. The way you're doing it now, Python is trying to evaluate self.DATE.replace(day=1)
when the class is created, rather than when the instance is created.
from dataclasses import dataclass, field
@dataclass
class thing:
DATE: datetime.datetime
BEG_DATE: datetime.datetime = field(init=False)
def __post_init__(self):
self.BEG_DATE = self.DATE.replace(day=1))
answered Nov 12 '18 at 15:01
Patrick Haugh
27.6k82546
27.6k82546
add a comment |
add a comment |
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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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%2f53257247%2fhow-to-create-class-attribute-that-is-an-alteration-of-the-same-class-attribute%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
@stovfl it is valid Python. Read up on post-init processing
– Joel
Nov 12 '18 at 15:12
@Joel: Thank you for pointing that out.
– stovfl
Nov 12 '18 at 15:16