类的创建
Python语言中,使用class关键字来创建类,其创建方式如下:
class ClassName(bases):
# class documentation string 类文档字符串,对类进行解释说明
class_suite
class是关键字
,bases是要继承的父类
,默认继承object
类。
class documentation string是类文档字符串
,一般用于类的注释说明
。
class_suite是类体
,主要包含属性
和方法
。
类、属性和方法的命名约定惯例如下:
类名
表示实例的抽象,命名时首字母大写
;属性
使用名词作为名字,比如name、age、weight等;方法
名一般指对属性的操作,其命名规则一般采用动词加属性名称形式,如updataName、updataAge、updataWeight等。 举例如下图:
# 类定义
class People: # 类名
name = "张三" # 属性名
def undate_name(self, name):# 方法名
self.name = name
Python的类分为以下两种:经典类
:Python2.x中类定义的默认方式,不继承object类,其内部由属性和方法组成。经典类定义的典型方式如下图:
# 经典类是指没有继承object类
class A:
pass
新式类
:Python3.x中类定义的默认方式,必须继承object方法,其典型定义方式如下图:
# 新式类是指继承object的类
class A(object):
pass
新式类
修复了经典类的一些bug(如多重继承时的歧义等),并且提供了对类方法
和静态方法
的支持。
在Python3.x中,如果没有显示指明要继承的父类,则默认继承object
类。
class A:
pass
class A():
pass
class A(object):
pass
Python3.x中,无需继承时,例子中三种类的创建效果一样。自动继承object类。
新式类添加了一些内置属性和方法,如下所示:
__name__ :属性的名字
__doc__ :属性的文档字符串
__get__(object) :获取对象属性值的方法
__set__(object, value) :设置对象属性值的方法
__delete__(object, value) :删除对象属性的方法
对象的创建
类创建完之后,就应该创建该类的实例或对象了,该过程称之为实例化。当一个对象被创建后,就包含标识、属性和方法这三个方面的对象特性了。其中,对象标识用于区分不同的对象,属性和方法与类中的成员变量和成员函数相对应
people = People("李四", 20, "50kg") # 实例化一个对象
如例子所示,对象标识符为people,属性为括号中内容,方法为类中方法
类的属性
Python语言中,属性分为类级别和实例级别两种。实例级别的属性值默认共享类级别的属性值。除非显式进行赋值操作。下面举一个例子来说明。
class A():
age = 10
obj2 = A()
obj3 = A()
如例子所示,存在三个实例,分别是类实例
A和对象实例
obj2、obj3。
在情形1中,obj2和obj3这两个对象实例共享类实例A的属性age;
# 情形1
print(obj2.age, obj3.age, A.age)
在情形2中,显示修改了对象实例obj1的属性aaa;
# 情形2
obj2.age+=2
print(obj2.age, obj3.age, A.age)
在情形3中,修改了类实例A的属性aaa。
# 情形3
A.age+=3
print(obj2.age, obj3.age, A.age)
结果如图所示:
情景1:
10 10 10
情景2:
12 10 10
情景3:
12 13 13
在情形2中已经修改了对象实例obj2的属性值age,其属性值和类实例A的属性值已经独立。而对象实例obj3的属性从来没有修改过,所以它还是和类实例A的属性值保持一致。
Python语言对于属性的设置采用“类.属性 = 值
”或“实例.属性 = 值
”的形式。如上例中obj2.age += 2等价于
obj2.age = obj2.age + 2,该语句包含了属性获取及属性设置两个操作。
Python语言中的属性操作遵循三个规则:
(1)属性的获取是按照从下到上的顺序来查找属性;
(2)类和实例是两个完全独立的对象;
(3)属性设置是针对实例本身进行的。
类的定义由属性和方法组成,属性
是对数据
的封装,方法
则是对类行为
的封装。属性按使用范围分为公有属性
和私有属性
,使用范围取决于属性名称。类的属性如下表所示。
内置属性如下表所示: