Python面对对象1

举报
Gere 发表于 2022/07/16 21:50:05 2022/07/16
【摘要】 首先需要明确,面向对象编程不是python独有的;面向对象是一种编程思想;在面向对象的思想中万物都是对象面向对象的简单理解:面向对象是把一组数据结构和处理他们的方法组成对象,把具有相同行为的对象归纳成类,通过封装隐藏类的内部细节,通过继承使类得到泛化,通过多态实现基于对象类型的动态分类。类是什么类表示一组(或一类)对象,每个对象都属于特定的类,并被称为该类的实例。在面向对象编程中,你编写表示...

首先需要明确,面向对象编程不是python独有的;
面向对象是一种编程思想;
在面向对象的思想中

万物都是对象

面向对象的简单理解:

面向对象是把一组数据结构和处理他们的方法组成对象,把具有相同行为的对象归纳成类,通过封装隐藏类的内部细节,通过继承使类得到泛化,通过多态实现基于对象类型的动态分类。

类是什么

类表示一组(或一类)对象,每个对象都属于特定的类,并被称为该类的实例。
在面向对象编程中,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。
编写类时,你定义一大类对象都有的通用行为。基于类创建 对象时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性。根据类来创建对象被称为 实例化,这让你能够使用类的实例
在面向对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法;对象由属性和方法组成。属性不过是属于对象的变量,而方法是存储在属性中的函数。

  • python中类的创建

class Person():
    
    def __init__(self):
        pass

    def set_name(self, name):
        self.name = name

    def get_name(self):
        return self.name
    
    def greet(self):
        print("Hello, world! I'm {}.".format(self.name))

Person是类的名称,包含三个方法定义, class 语句创建独立的命名空间,用于在其中定义函数。参数 self 指向对象本身。
方法 init() 是一个特殊的方法,每当创建新实例时,Python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法与普通方法发生名称冲突。
self 很有用,甚至必不可少。如果没有它,所有的方法都无法访问对象本身——要操作的属性所属的对象;
默认情况下,可从外部访问对象的属性。若让属性不能从对象外部访问,可将属性定义为私有。私有而只能通过存取器方法来访问
Python没有为私有属性提供直接的支持,要让方法或属性成为私有的(不能从外部访问),只需让其名称以两个下划线打头即可

对象是什么

对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。对象有以下特点:
对象具有属性和行为。
对象具有变化的状态。
对象具有唯一性。

对象都是某个类别的实例。

对象就是通过类定义的数据结构实例

person = Person()

python对象中的类成员

类的成员主要包括:

字段
方法
属性

字段:

字段包括:普通字段和静态字段,使用和定义都是不一样,其最本质的区别就是内存中保存的位置不同。

普通字段属于对象
静态字段属于类

class Person():
    type = 'ren' #静态字段
    def __init__(self):
        #普通字段
        self.name = 'mingzi'
        pass

    def set_name(self, name):
        self.name = name

p = Person()
p.type = 'woman'
p.name = 'man'
print(Person.type)
print(p.name)

在以上示例代码中:

type是静态字段,可通过类名之间调用
name是普通字段,需要通过实例对象调用
通常情况下我们都使用普通字段,当一个变量在类的所有对象中共同使用,而且数据共享的时候,我们就可以使用静态字段。

方法

  • 方法包括:普通方法、静态方法和类方法。

普通方法:由对象调用;包含一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self;
类方法:由类调用; 包含一个cls参数;执行类方法时,自动将调用该方法的类复制给cls;使用@classmethod装饰器
静态方法:由类调用;没有默认参数;使用@staticmethod装饰器

代码示例:

class Human:
    count = 0
    def __init__(self, name, age):
        self.name = name
        self.age = age
        
    #普通方法
    def setName(name):
       self.name=name
       
    @classmethod
    def add_count(cls):
        cls.count += 1       # 可以通过类名修改类属性
    @classmethod
    def get(cls):
        return cls.count
    
    @staticmethod
    def static_func():      # 静态方法
        print("普通函数")

普通方法中可以直接使用对象的普通字段
类方法中可以直接使用静态字段
静态方法中不能直接使用普通字段和静态字段

属性

python中的属性就是普通方法的变种,就是将一个方法伪装成一个属性;

  • 属性定义的两种方式:

装饰器:在方法上应用装饰器
静态字段:在类中定义值为property对象的静态字段

参考示例代码:

class A:
    @property
    def func(self):
        print("is A func")
     def get_AAA(self):
        print('get的时候运行我啊')
    def set_AAA(self,value):
        print('set的时候运行我啊')
    def delete_AAA(self):
        print('delete的时候运行我啊')
    AAA = property(get_AAA,set_AAA,delete_AAA) #内置property三个参数与get,set,delete一一对应
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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