在Python中,可以通过class关键字定义自己的类,然后通过自定义的类对象类创建实例对象。
例如,下面创建了一个Student的类,并且实现了这个类的初始化函数”__init__”:
1 2 3 4 5 6 7 |
class Student(object): count = 0 books = [] def __init__(self, name, age): self.name = name self.age = age pass |
接下来就通过上面的Student类来看看Python中类的相关内容。
数据属性
在上面的Student类中,”count””books””name”和”age”都被称为类的数据属性,但是它们又分为类数据属性和实例数据属性。
类数据属性和实例数据属性
首先看一段代码,代码中分别展示了对类数据属性和实例数据属性的访问:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Student.books.extend(["python", "javascript"]) print "Student book list: %s" %Student.books # class can add class attribute after class defination Student.hobbies = ["reading", "jogging", "swimming"] print "Student hobby list: %s" %Student.hobbies print dir(Student) print wilber = Student("Wilber", 28) print "%s is %d years old" %(wilber.name, wilber.age) # class instance can add new attribute # "gender" is the instance attribute only belongs to wilber wilber.gender = "male" print "%s is %s" %(wilber.name, wilber.gender) # class instance can access class attribute print dir(wilber) wilber.books.append("C#") print wilber.books print will = Student("Will", 27) print "%s is %d years old" %(will.name, will.age) # will shares the same class attribute with wilber # will don't have the "gender" attribute that belongs to wilber print dir(will) print will.books |
通过内建函数dir(),或者访问类的字典属性__dict__,这两种方式都可以查看类有哪些属性,代码的输出为:
对于类数据属性和实例数据属性,可以总结为:
- 类数据属性属于类本身,可以通过类名进行访问/修改
- 类数据属性也可以被类的所有实例访问/修改
- 在类定义之后,可以通过类名动态添加类数据属性,新增的类属性也被类和所有实例共有
- 实例数据属性只能通过实例访问
- 在实例生成后,还可以动态添加实例数据属性,但是这些实例数据属性只属于该实例
特殊的类属性
对于所有的类,都有一组特殊的属性:
类属性 | 含义 |
__name__ | 类的名字(字符串) |
__doc__ | 类的文档字符串 |
__bases__ | 类的所有父类组成的元组 |
__dict__ | 类的属性组成的字典 |
__module__ | 类所属的模块 |
__class__ | 类对象的类型 |
通过这些属性,可以得到 Student类的一些信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class Student(object): ''' this is a Student class ''' count = 0 books = [] def __init__(self, name, age): self.name = name self.age = age pass print Student.__name__ print Student.__doc__ print Student.__bases__ print Student.__dict__ print Student.__module__ print Student.__class |
代码输出为:
属性隐藏
从上面的介绍了解到,类数据属性属于类本身,被所有该类的实例共享;并且,通过实例可以去访问/修改类属性。但是,在通过实例中访问类属性的时候一定要谨慎,因为可能出现属性”隐藏”的情况。
继续使用上面的Student类,来看看属性隐藏:
1 2 3 4 5 6 7 tax crayon-theme-github crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 12px; margin-bottom: 12px; font-size: 13px !important; line-height: 15px !important;">
接下来就通过上面的Student类来看看Python中类的相关内容。
数据属性在上面的Student类中,”count””books””name”和”age”都被称为类的数据属性,但是它们又分为类数据属性和实例数据属性。 类数据属性和实例数据属性 首先看一段代码,代码中分别展示了对类数据属性和实例数据属性的访问:
通过内建函数dir(),或者访问类的字典属性__dict__,这两种方式都可以查看类有哪些属性,代码的输出为: 对于类数据属性和实例数据属性,可以总结为:
特殊的类属性 对于所有的类,都有一组特殊的属性:
通过这些属性,可以得到 Student类的一些信息:
代码输出为: 属性隐藏 从上面的介绍了解到,类数据属性属于类本身,被所有该类的实例共享;并且,通过实例可以去访问/修改类属性。但是,在通过实例中访问类属性的时候一定要谨慎,因为可能出现属性”隐藏”的情况。 继续使用上面的Student类,来看看属性隐藏:
|