Python 编程入门 / Python 编程 - 类和对象
外观
Python 从一开始就使用面向对象编程,因此创建类、使用类和对象非常容易。
class 语句创建一个新的类定义。用户提供的类名紧跟在关键字 class 后面,后面跟着一个冒号,如下所示
class myclass: ‘The documentation of the class can be added here’ Class objects Class methods
class myclass:
'This docstring provides for the details of the class defined'
count=0
def __init__(self,name,paycheck):
self.name=name
self.paycheck=paycheck
myclass.count+=1
def displayworkerCount(self):
print "Total no of worker %d" %myclass.count
def displayworkerName(self):
print "Name of the user",self.name,"'s salary", self.paycheck
>>> worker1=myclass("Nobody",15000)
>>> worker2=myclass("SNGET", 10000)
>>> worker3=myclass("Somebody", 20000)
>>> worker4=myclass("Everybody",25000)
>>> worker1.count
4
>>> worker1.displayworkerCount()
Total no of worker 4
>>> worker1.displayworkerName()
Name of the user Nobody 's salary 15000
>>> print myclass.__doc__
This docstring provides for the details of the class defined
>>>
最终用户可以使用 hasattr 对象检查定义的类中是否定义了特定的方法或对象或实例。
>>> worker1 <__main__.myclass instance at 0x017D5990> >>> worker1.name 'Nobody' >>> worker1.paycheck 15000 >>> hasattr(worker1,'age') False >>> hasattr(worker1,'displayworkerCount') True
最终用户可以使用以下方法随时添加、修改、设置或删除类和对象的属性。
>>> worker5=myclass("","")
>>> worker5.name
''
>>> worker5.paycheck
''
>>> worker5.name="New Body"
>>> worker5.paycheck=50000
>>>
>>> worker5.name
'New Body'
>>> worker5.paycheck
50000
>>> worker1.paycheck
15000
>>> worker1.paycheck=55000
>>> worker1.paycheck
55000
>>> setattr(worker1, "paycheck", 60000)
>>> worker1.paycheck
60000
>>> >>>
>>> delattr(worker1, "name")
>>> worker1
<__main__.myclass instance at 0x0222EA80>
>>> worker1.name
Traceback (most recent call last):
File "<pyshell#372>", line 1, in <module>
worker1.name
AttributeError: myclass instance has no attribute 'name'
默认情况下,所有 Python 类都具有以下内置属性,可以使用点运算符访问,就像 __doc__ 属性提供类的文档一样。
- __dict__ : 类的命名空间的字典
- __doc__ : 类文档字符串或无,如果未定义
- __name__ : 类名
- __module__ : 定义类的模块名称。此属性在交互模式中为 "__main__"
- __bases__ : 一个可能为空的元组,包含基类,按照它们在基类列表中的出现顺序排列。
尝试上述方法针对上述定义的 myclass,我们得到以下结果。
>>> print "The name of the class is :", myclass.__name__
The name of the class is : myclass
>>> print "The name of the module is :", myclass.__module__
The name of the module is : __main__
>>> print "The bases for the class myclass is :", myclass.__bases__
The bases for the class myclass is : ()
>>> print "The dictionary of namespace for myclass are :",myclass.__dict__
The dictionary of namespace for myclass are : {'count': 4, '__module__': '__main__', 'displayworkerCount': <function
displayworkerCount at 0x02244B70>, 'displayworkerName': <function displayworkerName at 0x02244BB0>, '__doc__': 'This
docstring provides for the details of the class defined', '__init__': <function __init__ at 0x02244B30>}
>>> print "The document string for myclass is: ",myclass.__doc__
The document string for myclass is: This docstring provides for the details of the class defined
>>>