Skip to main content
 首页 » 程序教程

Python面向对象编程之类属性方法

2016年06月25日29630

面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用。面向对象三大特性:封装、继承和多态。本篇将详细介绍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

评论列表暂无评论
发表评论