【Python学习笔记】Python入门之面向对象

举报
孙小北 发表于 2021/12/11 21:02:33 2021/12/11
【摘要】 Python是一种解释型的、面向对象的、带有动态语义的高级程序设计语言,本节主要总结Python入门之面向对象:类,对象,实例化,构造函数,类的属性和方法。

相关概念

类(Class): 用来描述具有相同的属性和方法对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。类似对象的抽象。

方法:类中定义的函数。(类的成员函数)

类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外类变量通常不作为实例变量使用。

实例变量:定义在方法中的变量,只作用于当前实例的类。

数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。(类变量+实例变量)

方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写

继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。

实例化:创建一个类的实例,类的具体对象。(创建对象)

对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法

注:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法。对象可以包含任意数量和类型的数据。


类定义

# coding:utf-8
# 计算器类,实现加减乘除


class Calculator:
    # 类的成员变量
    name = 'My Calculator'

    # 类的成员函数
    # 加法
    def add(self, x, y):
        print(self.name, '--add')
        return x + y

    # 减法
    def minus(self, x, y):
        print(self.name, '--minus')
        return x - y

    # 乘法
    def times(self, x, y):
        print(self.name, '--times')
        return x * y

    # 除法
    def divide(self, x, y):
        print(self.name, '--divide')
        return x / y

注:类的名称一般首字母大写,变量和函数名称一般首字母小写(养成良好的编码习惯)


类对象

# 实例化计算器类
calculator = Calculator()
print(calculator.name)
sum = calculator.add(5, 8)
print('5+8=', sum)

输出:

My Calculator

My Calculator --add

5+8= 13

注:创建一个类之后,可以通过类名访问其属性(obj.name,obj.function())

构造函数

类有一个名为 __init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用

class People:
    # 类变量 公共变量
    name = ''
    age = 0
    sex = '男'
    # 类变量 私有变量
    __site = 'www.xiaowangyun.com'

    # 构造函数 专有函数
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

    # 公共函数获取私有变量
    def get_site(self):
        print('site:', self.__site)

    # 公共函数speak
    def speak(self):
        print('name:', self.name, ' age:', self.age, ' sex:', self.sex)

    # 私有函数speak
    def __speak(self):
        print('name:', self.name, ' age:', self.age, ' sex:', self.sex)
 
 
# 实例化
xwy = People('小望云', 2, '女')
xwy.speak()
xwy.get_site()
print(xwy.name)

# 类的实例化对象访问类的私有方法和私有属性会报错
# print(xwy.__site)
# xwy.__speak()

出现一个小问题,找了半天,哈哈,逗~ 围观一下:Python构造函数报错:TypeError: People() takes no arguments    

注:

1)__init__    init前后各两个下划线_

2) 重写构造函数后,参数必须和构造函数所必须参数一致

3)self代表类的实例,而非类

类的属性

私有属性

__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。

公共属性

private_attrs:直接属性名字便是共有属性,类的实例化对象可以访问公共属性,但不能访问私有属性。

类的方法


在类地内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定是用 self。

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。self代表类的实例,而非类。

类的公共方法

即类里面定义的普通的函数,类的实例化对象可以访问公共方法,不能访问私有方法

类的私有方法

__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类地外部调用。self.__private_methods。

类的专有方法(方法名前后均有两个下划线)

__init__ : 构造函数,在生成对象时调用

__del__ : 析构函数,释放对象时使用

__repr__ : 打印,转换

__setitem__ : 按照索引赋值

__getitem__: 按照索引获取值

__len__: 获得长度

__cmp__: 比较运算

__call__: 函数调用

__add__: 加运算

__sub__: 减运算

__mul__: 乘运算

__truediv__: 除运算

__mod__: 求余运算

__pow__: 乘方

注:方法名前后均有两个下划线(_)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。