Python基础---类Class

类Class       

类是抽象的模板,实例是根据类创建的一个个具体的对象,每个对象都拥有相同的方法,但是可能数据不同

定义:在Python中,使用class关键字定义类,class后面紧接着是类名

   类名一般都是以大写字母开头的单词,类名后面紧跟(object),object代表该类所继承的类,如果没有明确继承的类,一般默认继承object类

1 class Name(object):

 

创建一个类:

  1、类中的函数称为方法,一个class类中,必定含有一个__init__()这个特殊的方法,init两边分别是两个下划线

     每当使用该类创建实例的时候,都会自动运行init方法

     __init__(self, 形参1, 形参2...)方法中,形参self必不可少,必须位于所有形参前面,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法

     在init方法下定义的两个变量都有前缀self,以self为前缀的变量都可供类中的所有方法使用,也可以通过类的任何实例来访问这些变量

1 class Name(object):
2     def __init__(self, first_name, last_name):
3         self.first_name = first_name
4         self.last_name = last_name

   2、有关于函数的一切都适用与方法,唯一的差别是调用方法的方式

    3、在类中,还包含其他自己定义的方法,即函数

1 class Name(object):
2     def __init__(self, first_name, last_name):
3         self.first_name = first_name
4         self.last_name = last_name
5 
6     def guest_name(self):
7         name = self.first_name + ' ' + self.last_name    # self前缀变量可以被guest_name方法直接使用
8         print(name)

 

使用类和实例:

  1、使用类进行创建实例

1 guest = Name('alan', 'wood')

  2、访问属性:访问实例的属性,可以使用句点表示法

1 guest = Name('alan', 'wood')
2 first = guest.first_name  # 查看guest实例的first_name变量值
3 print(first)
4 --->alan

  3、调用方法:在创建实例后,可以使用句点表示法来调用类中定义的任何方法

1 guest = Name('alan', 'wood')
2 guest.guest_name()
3 --->Alan Wood

 

继承:

当类A继承另一个类B时,A将获得B所有的属性和方法,所以B是A的父类,A是B的子类

子类在继承父类所有的属性和方法后,还可以定义自己的属性和方法

1、子类的方法__init__():

  需要使用super()函数,将父类和子类关联起来(代码片段为Python 3.x版本写法)

1 class Information(Name):
2     def __init__(self, first_name, last_name, age, height):
3         super().__init__(first_name, last_name)

2、给子类定义新的属性和方法

 1 class Information(Name):
 2     def __init__(self, first_name, last_name, age, height):
 3         super().__init__(first_name, last_name)
 4         self.age = age  # 子类中新的属性
 5         self.height = height
 6 
 7     def guest_age(self):  # 子类的方法
 8         print('The guest\'s age is ' + str(self.age))
 9 
10     def guest_height(self):
11         print('The guest\'s age is ' + self.height)
12 
13 
14 guest = Information('alan', 'wood', 18, '180cm')
15 guest.guest_name()  # 子类可以直接调用父类中的方法
16 guest.guest_age()
17 guest.guest_height()

 

3、父类中的方法只要不符合子类的目标,就可以进行重写,可在子类中定义方法,方法名称要与父类方法同名,在使用子类创建实例时,Python只会关注子类中的被重写方法 

 1 class Information(Name):
 2     def __init__(self, first_name, last_name):
 3         super().__init__(first_name, last_name)
 4 
 5     def guest_name(self):  # 在子类中重写了父类的guest_name方法
 6         name = self.first_name + '----' + self.last_name
 7         print(name)
 8 
 9 
10 guest = Information('alan', 'wood')
11 guest.guest_name()  # 调用guest_name方法,输出结果显示,使用的是重写后的方法
12 --->alan----wood

 

导入类:

1、导入单个类:

1 from PyQt5.QtWidgets import QApplication

 

2、导入多个类:

  在一个模块中可以存储多个类

1 from PyQt5.QtWidgets import QApplication, QAction

3、导入整个模块:

  导入模块后,如果要使用相关类,则需要句点表示法

1 import PyQt5
2 
3 x = PyQt5.QtWidgets.QAction()

 

类编码风格:

1、类名采用驼峰命名法,即类名中的每个单词的首字母都要大写,而不是用下划线

2、在类定义后,需要包含一段注释('''  '''),简要描述类的功能,并遵循函数的注释编写的规则

3、在类中,可使用一个空行分割方法,在模块中,使用两个空行分割类

4、在导入标准库的模块和自定义的模块时,先导入标准库模块,再导入自定义模块,中间使用空行隔开

 

类的常用函数:

1、issubclass()

  检测一个类是否是另一个或一组类中的子类

  语法:issubclass(cls1, cls2)  cls1是否是cls2的子类

       issubclass(cls1, (cls2, cls3))  cls1是否是cls2或者cls3的子类

  返回值:bool

 

 1 class Animal():
 2     pass
 3 
 4 class Dog(Animal):
 5     pass
 6 
 7 class Cat(Animal):
 8     pass
 9 
10 print(issubclass(Dog, Animal))
11 --->True

 

2、isinstance()

  检测某个对象是否是指定类的对象

  语法:isinstance(obj, type)

  返回值:bool

 1 class Animal():
 2     pass
 3 
 4 class Dog(Animal):
 5     pass
 6 
 7 class Cat(Animal):
 8     pass
 9 
10 dog = Dog()
11 print(isinstance(dog, Dog))
12 --->True
13 print(isinstance(dog, Animal))
14 --->True

3、hasattr()

  检测一个对象或类有无制定成员

  语法:hasattr(cls, string)

  返回值:bool

1 class Animal():
2     name = 'x'
3     age = 11
4 
5 print(hasattr(Animal, 'name'))
6 --->True

4、getattr(obj, attrname)      获取对象或类成员的值,对已存在的值  等价于  obj.attrname

   getattr(obj, attrname, default)  ----------------------,对不存在成员设置默认值,但是只对当此有效,返回default默认值

   setattr(obj, attrname, value)    设置对象或类成员的值,相当于 obj.attrname = value

   delattr(obj, attrname)       删除对象或类成员的值,需要保证对象中含有attrname

5、dir()

  获取一个对象或类的所有成员

  语法:dir(obj)

  返回值:list

 

类的内置属性:

 

1、__dict__ :

  获取类或对象自身的属性

  语法:obj.__dict__ 

  返回值:字典

 

2、__doc__:

  获取类或对象的文档,即''' '''中的内容 document

  语法:obj.__doc__

 

3、__name__:

  获取类名,对象不可用

  语法:cls.__name__

 

4、__bases__:

  获取类的直接继承的所有父类的元组

  语法:cls.__bases__

  返回值:元组

 

5、__moudle__:

  获取类的模块名称

  语法:cls.__moudle__

 

                           

posted @ 2018-02-28 17:52  风缘  阅读(433)  评论(0)    收藏  举报