面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用。面向对象三大特性:封装、继承和多态。本篇将详细介绍Python类的成员、成员修饰符、类的特殊成员。一起来看看Python面向对象编程之类属性方法吧。
类是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中);对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数。
Python内置类属性
__dict__ : 类的属性(包含一个字典,由类的数据属性组成)
__doc__ :类的文档字符串
__name__: 类名
__module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)
__bases__ : 类的所有父类构成元素(包含了以个由所有父类组成的元组)
Python内置类属性调用实例如下:
#!/usr/bin/env python # coding:utf-8 __author__ = "风轻情淡" # Python使用class关键字创建类 class Person: """人这个类的基类""" # Python类中的静态变量 country = "中国" # Python类的初始化方法 def __init__(self, name, age): # Python类中的属性 self.name = name self.age = age # Python类中自定义的方法 def get_age(self): print(self.age) def get_name(self): print(self.mame) # 结果为:Person.__doc__: 人这个类的基类 print("Person.__doc__:", Person.__doc__) # 结果为:Person.__name__: Person print("Person.__name__:", Person.__name__) # 结果为:Person.__module__: __main__ print("Person.__module__:", Person.__module__) # 结果为:Person.__bases__: (<class 'object'>,) print("Person.__bases__:", Person.__bases__) # 结果为:Person.__dict__: {'__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'Pe... print("Person.__dict__:", Person.__dict__)
类的继承
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。
需要注意的地方:继承语法 class 派生类名(基类名)://... 基类名写作括号里,基本类是在类定义的时候,在元组之中指明的。
在python中继承中的一些特点:
1:在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。
2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数
3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。
如果在继承元组中列了一个以上的类,那么它就被称作"多重继承" 。派生类的声明,与他们的父类类似,继承的基类列表跟在类名之后,如下所示:
class SubClassName (ParentClass1[, ParentClass2, ...]): 'Optional class documentation string' class_suite
实例代码:
#!/usr/bin/env python # coding:utf-8 __author__ = "风轻情淡" class Parent: # 定义父类 parentAttr = 100 def __init__(self): print("调用父类构造函数") def parentMethod(self): print('调用父类方法') def setAttr(self, attr): Parent.parentAttr = attr def getAttr(self): print("父类属性 :", Parent.parentAttr) class Child(Parent): # 定义子类 def __init__(self): print("调用子类构造方法") def childMethod(self): print("调用子类方法 child method") c = Child() # 实例化子类 c.childMethod() # 调用子类的方法 c.parentMethod() # 调用父类方法 c.setAttr(200) # 再次调用父类的方法 c.getAttr() # 再次调用父类的方法
类属性与方法
类的私有属性
__private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。
类的方法
在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数
类的私有方法
__private_method:两个下划线开头,声明该方法为私有方法,不能在类地外部调用。在类的内部调用 self.__private_methods