面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用。面向对象三大特性:封装、继承和多态。本篇将详细介绍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__: (,)
print("Person.__bases__:", Person.__bases__)
# 结果为:Person.__dict__: {'__module__': '__main__', '__weakref__':
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