类的声明和函数的声明形式是差不多的,开始都是关键字+自定义名称
定义实例变量:可以在定义方法的时候直接定义,也可以使用实例来定义
可以使用dir(ClassName) ClassName.__dict__
来查看有哪些类属性
class ClassName:
'the discription of this class'#这个是类文档说明字符串
foo='static attribute'#在定义类的时候直接定义属性,这个属性是类属性,也就是说是静态的.
def aMethod(self,parameter):#这里定义的方法是实例的方法,也就是跟对象实例绑定的
'discription of this method'#这是方法说明字符串
ClassName.foo='changed static attribute'#访问静态属性可以使用ClassName.foo,
#当然也可以使用self.foo来当做实例变量来访问
self.foo='instance attribute'#访问实例属性
实例1静态变量:
fo=10 #这个是全局变量
class ClassName(object):
"""docstring for ClassName"""
fo=1
def foun(self2):
print(ClassName.fo)#输出1
def __init__(self):
global fo #使用global可以访问到全局变量
fo+=1 #访问全局变量,python中的全局变量就是文件中直接定义的变量与函数和类的位置关系都是并列的
print(fo) #输出11
ClassName.fo+=1#类变量加一
# instance2=ClassName()
# print(instance2.foo)
print(ClassName().fo)#输出2
print(ClassName().fo)#输出3
x=60 #这个是全局变量
def func():
global x
print(x)
x=90
print(x)
实例2实例变量:
class ClassName(object):
"""docstring for ClassName"""
fo=1
def __init__(self):
self.fo+=1#实例变量加一,类变量并没有改变
print(ClassName().fo)#输出2
print(ClassName().fo)#输出2
print(ClassName.fo)#输出1,这里访问类变量并没有因为self.fo+=1而改变
print(ClassName.fo)#输出1
实例3实例变量:
class ClassName(object):
"""docstring for ClassName"""
def __init__(self):
self.fo=1#实例变量
instance1=ClassName()
instance1.foo='instance attribute,can\'t be accessed by class'
print(dir(ClassName))
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
并没有foo和fo
实例4定义实例变量:
class ClassName(object):
"""docstring for ClassName"""
def __init__(self):
self.fo=1 #定义类时定义实例变量
def fun(self):
attribute1='instance1' #定义类时定义实例变量
instance1=ClassName()
instance1.foo='instance attribute,can\'t be accessed by class' #使用实例定义实例变量
print(ClassName.__dict__)
输出:
{'__dict__': '__dict__' of 'ClassName' objects>, '__weakref__': '__weakref__' of 'ClassName' objects>, '__doc__': 'docstring for ClassName', '__module__': '__main__', '__init__': 0x035194F8>, 'fun': 0x035195D0>}
print(ClassName.attribute1)
发生错误:
AttributeError: type object 'ClassName' has no attribute 'attribute1'
2、如何得知类的属性有哪些?
使用内建函数dir(class)
使用类的字典属性:class._ _ dict _ _#这里会返回一个字典,
3、一些特殊的类属性:
C.__name__ #类C的名字(字符串)
C.__doc__ #类C的文档字符串
C.__bases__ #类C的所有父类构成的元组
C.__dict__ #类C的属性
C.__module__ #类C定义所在的模块(1.5 版本新增)
C.__class__ 实例C对应的类(仅新式类中)#注意这里指的是实例
4、类定义所在模块
类定义在所执行的文件中是,这时模块名为__main__
,
classA.py:
class Classname:
pass
instance=ClassName()
print(type(instance))
输出:<class '__main__.ClassName'>
----------
classB.py
from classA import Classname
instance=Classname()
print(type(instance))
输出:<class 'classA.ClassName'>