When I execute this code:
class cls :
A=1
def __init__(self):
self.a=2
obj=cls()
print(hasattr(cls,'A'))
print(hasattr(cls,'a'))
print(hasattr(obj,'A'))
print(hasattr(obj,'a'))
I get this output:
True
False
True
True
Everything is clear to me except for the second line. Why do I get False
when I execute the hasattr
function on the class while I got True
when using it with the object for the same attribute?
Be careful cls
is typically used for classmethod
s for example like this:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
@classmethod
def fromBirthYear(cls, name, birthYear):
return cls(name, date.today().year - birthYear)
So it is better to not use it for your own class names to avoid confusion.
Comming to your question. In your first block you use a reference to the class itself. So here only static variables are visible as __init__
has not been called.
>>> print(hasattr(cls1,'A'))
True
>>> print(hasattr(cls1,'a'))
False
In the second block you use an instance of the class. Here, __init__()
was executed and therefore obj.a
exists.
>>> obj=cls1()
>>> print(hasattr(obj,'A'))
True
>>> print(hasattr(obj,'a'))
True
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments