面向对象与类

简介: 面向对象与类

1.简述

  • 面向对象方法:面向对象方法是一种把对象的思想应用于软件开发过程中,指导开发活动的系统方法。
    (Object-Oriented Method),简称OO方法。

对象程序的主要特性:

  1. 封装性:数据仅能通过一组接口函数来获取,经过封装的数据能确保信息的隐秘性。
  2. 继承性:通过继承的特性,衍生类继承了其基础类的成员变量与类方法。衍生类也叫作次类子类,基础类也叫作父类
  3. 多态性:允许一个函数有多种不同的接口。依照调用函数时使用的参数,类知道使用哪一种接口。Python使用动态类型与后期绑定实现多态功能。

2.定义类,创建实例

  • Python使用关键字class来定义类
class Demo(object):
    """文档字符串。"""
    go = '4'

    def fun1(self):
        print("hello world!")


d = Demo()
d.fun1()
print(Demo.__doc__)  # 查看帮助文章信息

在这里插入图片描述

  • fun1是Demo类的一个方法
  • d是Demo类的一个实例对象
  • go是一个类变量
  • 类的帮助信息可以通过**className.__doc__**查看。
  • self在对象内指对象本身。

3.__init__()方法

Python使用 __init__() 函数作为对象的构造方法
__init__语句定义了类的构造方法,在创建实例的同时设置类的属性值。

class Demo(object):
    """文档字符串。"""
    go = '4'

    def __init__(self, name, price):
        self.name = name
        self.price = price

    def fun1(self):
        print("hello world!")


d = Demo('abc', 30)
print('go:', d.go)
print('name:', d.name)
print('price:', d.price)

在这里插入图片描述

4.类的私有属性

class Demo(object):
    """文档字符串。"""
    # 定义基本属性
    name = 'x'
    price = 0
    # 定义私有属性
    __city = "Beijing"

    # 定义构造方法
    def __init__(self, name, price,city):
        self.name = name
        self.price = price
        self.__city = city

    def fun1(self):
        print("city:%s,name:%s,price:%s" % (self.__city, self.name, self.price))


d = Demo('abc', 30, "Shanghai")
d.fun1()
print(Demo.price)
print(Demo.name)

在这里插入图片描述

  • 写在__init__上边的也是类属性(类变量),也可以通过类来访问。也是实例对象的属性,类变量被该类所有实例所共享。实例对象在创建时如果传入的属性值对其有修改,则覆盖之。但类的属性值不变。(也可以表述为,对于实例变量,如果实例变量的名称与类变量名称相同,Python就会使用实例变量的名称)
  • 以该例为例,要创建出一个实例对象,必须写入name,price, __city三个属性,少一个字实例无法被创建出。
  • 其中__city属性是私有属性,不能直接通过外部访问。但是可以通过类内部定义的方法进行访问,如fun1输出的内容中有关于city属性的描述。
  • 对于永远不会变的属性,可以写在__init__()上方,在__init__内不再写,创建时也不用再传入。

5.类的内置属性

(1)字典对象的值,__dict__

类的属性是以字典对象的形式存储的。即__dict__属性

class Demo(object):
    """文档字符串。"""
    a = 100

print(Demo.__dict__)

在这里插入图片描述

(2)文件字符串,__doc__

class Demo(object):
    """文档字符串。"""
    a = 100

print(Demo.__doc__)

在这里插入图片描述

(3)类名,__name__

class Demo(object):
    """文档字符串。"""
    a = 100

print(Demo.__name__)

在这里插入图片描述

(4)包含此类的模块名, module

class Demo(object):
    """文档字符串。"""
    a = 100

print(Demo.__module__)

在这里插入图片描述

(5)此类的基类名称,__bases__

class Demo(object):
    """文档字符串。"""
    a = 100

class DDemo(Demo):
    "DDemo类继承类Demo"
    b = 200

print(DDemo.__bases__)

在这里插入图片描述
该属性是一个tuple对象。

6.类的实例

(1)实例默认属性

  • 在不添加任何属性的情况下,创建出的实例对象默认有两个属性:①id ②type
class Demo(object):
    """文档字符串。"""
    a = 100

d = Demo()

print(id(d))
print(type(d))

在这里插入图片描述

(2)内置函数isinstance(instance_object,class_object)

  • 用于测试某实例是否为某类的实例
class Demo(object):
    """文档字符串。"""
    a = 100

d = Demo()

print(isinstance(d, Demo))

在这里插入图片描述

(3)类变量与实例变量

class Demo(object):
    """文档字符串。"""
    default_age = 18   # 类变量
    
    def __init__(self):
        self.age = Demo.default_age    # 实例变量  这里调用default_age的值前边必须有类名Demo前缀。


d = Demo()

在该例子中default_age是类变量,也被所有实例变量所共享,可以通过d.default_age访问。

print(d.default_age)

在这里插入图片描述
同时实例d也有age属性,也可以通过d.age访问。
但是Demo类没有age属性。

如果实例变量名称设置的与类变量名称相同,Python就会使用示例变量的名称。

(4)类实例的内置属性

  • __init__ 属性字典
class Demo(object):
    """文档字符串。"""

    def __init__(self, name=None, price=None,city=None):
        self.name = name
        self.price = price
        self.city = city


d = Demo()
print(d. __dict__)

在这里插入图片描述

  • __class__ 类名
class Demo(object):
    """文档字符串。"""

    def __init__(self, name=None, price=None,city=None):
        self.name = name
        self.price = price
        self.city = city


d = Demo()
print(d. __class__)

在这里插入图片描述

7.类的内置方法

(1) __init__(self):

类的构造方法,当创建一个类的实例时,就会调用该方法。

(2)__str__(self):

返回一个字符串对象,用来设置对象以字符串类型出现时如何显示。(该方法被内置函数str()和print()函数调用)
对比以下两组代码:

class Demo(object):
    def __init__(self, arg):
        self.name = arg


d = Demo("Tom")
print(d)

在这里插入图片描述
调用__str__方法后,再打印出这个实例,则显示的是该实例的name属性(名称)。这个可以用来设置我们想在输出后看到的内容。

class Demo(object):
    def __init__(self, arg):
        self.name = arg
    def __str__(self):
        return self.name


d = Demo("Tom")
print(d)

在这里插入图片描述

目录
相关文章
|
存储 弹性计算 JavaScript
面向对象-1:类的定义
本实验将介绍TypeScript中类的定义
|
5月前
|
Java C# 索引
C# 面向对象编程(一)——类
C# 面向对象编程(一)——类
40 0
|
6月前
|
Java
深入理解Java中的类与对象:封装、继承与多态
深入理解Java中的类与对象:封装、继承与多态
|
7月前
|
C++
C++ 是一种面向对象的编程语言,它支持对象、类、继承、多态等面向对象的特性
C++ 是一种面向对象的编程语言,它支持对象、类、继承、多态等面向对象的特性
|
7月前
|
Python
面向对象详解,面向对象的三大特征:封装、继承、多态-1
面向对象详解,面向对象的三大特征:封装、继承、多态
|
7月前
|
Python 容器
面向对象详解,面向对象的三大特征:封装、继承、多态-2
面向对象详解,面向对象的三大特征:封装、继承、多态
|
算法 Java 编译器
类和面向对象
类和面向对象
111 0
|
存储 算法 Java
面向对象编程实践:类、对象与继承
面向对象编程实践:类、对象与继承
67 0