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
366516
366516
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 |
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
26.7k41335
26.7k41335
add a comment |
add a comment |
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