Can I make instance methods not callable as static methods?
up vote
2
down vote
favorite
I have a @asynccontextmanager
method named opened()
that is an instance method of a class File
. Sometimes I call it using a class by mistake like so File.opened()
. It then fails because the object is not initialized (e.g. name) with an error that does not really express the problem.
AttributeError: 'str' object has no attribute 'opened'
Is there a way to prevent this?
Example
class File:
def __init__(self, file_name):
self.file_name = file_name
@asynccontextmanager
async def opened(self):
open(self.file_name)
# do other things
This should be OK:
file = File('input.csv')
async with file.opened() as file_handle:
#do stuff
But his should yield an error telling me that I can't use a instance method without creating an object first:
async with File.opened() as file_handle:
# does not work, and should not be allowed
python-3.x
add a comment |
up vote
2
down vote
favorite
I have a @asynccontextmanager
method named opened()
that is an instance method of a class File
. Sometimes I call it using a class by mistake like so File.opened()
. It then fails because the object is not initialized (e.g. name) with an error that does not really express the problem.
AttributeError: 'str' object has no attribute 'opened'
Is there a way to prevent this?
Example
class File:
def __init__(self, file_name):
self.file_name = file_name
@asynccontextmanager
async def opened(self):
open(self.file_name)
# do other things
This should be OK:
file = File('input.csv')
async with file.opened() as file_handle:
#do stuff
But his should yield an error telling me that I can't use a instance method without creating an object first:
async with File.opened() as file_handle:
# does not work, and should not be allowed
python-3.x
add a comment |
up vote
2
down vote
favorite
up vote
2
down vote
favorite
I have a @asynccontextmanager
method named opened()
that is an instance method of a class File
. Sometimes I call it using a class by mistake like so File.opened()
. It then fails because the object is not initialized (e.g. name) with an error that does not really express the problem.
AttributeError: 'str' object has no attribute 'opened'
Is there a way to prevent this?
Example
class File:
def __init__(self, file_name):
self.file_name = file_name
@asynccontextmanager
async def opened(self):
open(self.file_name)
# do other things
This should be OK:
file = File('input.csv')
async with file.opened() as file_handle:
#do stuff
But his should yield an error telling me that I can't use a instance method without creating an object first:
async with File.opened() as file_handle:
# does not work, and should not be allowed
python-3.x
I have a @asynccontextmanager
method named opened()
that is an instance method of a class File
. Sometimes I call it using a class by mistake like so File.opened()
. It then fails because the object is not initialized (e.g. name) with an error that does not really express the problem.
AttributeError: 'str' object has no attribute 'opened'
Is there a way to prevent this?
Example
class File:
def __init__(self, file_name):
self.file_name = file_name
@asynccontextmanager
async def opened(self):
open(self.file_name)
# do other things
This should be OK:
file = File('input.csv')
async with file.opened() as file_handle:
#do stuff
But his should yield an error telling me that I can't use a instance method without creating an object first:
async with File.opened() as file_handle:
# does not work, and should not be allowed
python-3.x
python-3.x
asked Nov 9 at 19:06
problemofficer
365517
365517
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
accepted
You can check if self
is an instance of File
so that you can raise an exception with a friendlier error message:
@asynccontextmanager
async def opened(self):
if not isinstance(self, File):
raise RuntimeError('opened() must be called as a method bound to a File instance.')
open(self.file_name)
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%2f53231884%2fcan-i-make-instance-methods-not-callable-as-static-methods%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
up vote
1
down vote
accepted
You can check if self
is an instance of File
so that you can raise an exception with a friendlier error message:
@asynccontextmanager
async def opened(self):
if not isinstance(self, File):
raise RuntimeError('opened() must be called as a method bound to a File instance.')
open(self.file_name)
add a comment |
up vote
1
down vote
accepted
You can check if self
is an instance of File
so that you can raise an exception with a friendlier error message:
@asynccontextmanager
async def opened(self):
if not isinstance(self, File):
raise RuntimeError('opened() must be called as a method bound to a File instance.')
open(self.file_name)
add a comment |
up vote
1
down vote
accepted
up vote
1
down vote
accepted
You can check if self
is an instance of File
so that you can raise an exception with a friendlier error message:
@asynccontextmanager
async def opened(self):
if not isinstance(self, File):
raise RuntimeError('opened() must be called as a method bound to a File instance.')
open(self.file_name)
You can check if self
is an instance of File
so that you can raise an exception with a friendlier error message:
@asynccontextmanager
async def opened(self):
if not isinstance(self, File):
raise RuntimeError('opened() must be called as a method bound to a File instance.')
open(self.file_name)
answered Nov 9 at 19:23
blhsing
28.3k41335
28.3k41335
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%2f53231884%2fcan-i-make-instance-methods-not-callable-as-static-methods%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