Python之面向对象

1、对面向对象的理解

⾯向对象(Object Oriented)是⼀种程序设计思想,⽬的是降低 ⼤规模程序的设计复杂度,提⾼代码的重⽤性。
它是将程序的功能进⾏模块化的设计,抽象成有“属性”和“⽅法”的“类” ,通过根据这些“类”创建出来的对象实例,进⾏相互的调⽤,完成程序
我们要掌握在⾯向对象程序设计过程中的语法:定义类(类中的属 性、⽅法)、创建类的对象/实例、使⽤对象(访问属性、调⽤⽅法)。
类(class)—— 将⼀组具有共同特征的事物的这些特征抽象出 来,形成的概念就是类。
        ○ 类就是⼀系列特征的抽象,包括了:属性(数据)、⽅法(函数)
        ○ 类是抽象的,是模板、是蓝图、……
        ○ 在python中,数据类型就是类,类就是数据类型,例如:9是int数据类型的数据,9是int                 类的数据
对象(object)—— 具体的事物
        ○ 对象是具体的,是根据类创建出来的。也称对象为“实例”(instance)

2、定义类

类名建议首字母大写,使用驼峰命名法,Python标准库中的类就遵循驼峰命名法

Python3中所有的类都默认继承了object类,不需要显式写出来

class 类名:
     # 定义类属性,一般将此类不会更改的属性定义为类属性
     属性名3 = 表达式
     属性名4 = 表达式

     # 定了类的初始化⽅法(魔术⽅法之一),⽅法的名字固定叫做__init__,该⽅法会在后续创建该
     #类的对象实例时,⾃动被调⽤,类似c++中的构造函数,self类似c++中的this指针
     # 主要在该⽅法中,为该类的对象实例定义属性。
     def __init__(self, 其它形参):
         # 定义实例属性 ,也称为对象属性
         self.属性名1 = 表达式
         self.属性名2 = 表达式

     # 定义类⽅法,类方法中只能调用类成员,不能调用对象成员,cls指代本类
     @classmethod
     def ⽅法名3(cls, 其它形参):
         编写该⽅法要实现的具体功能的代码
 
     # 定义类⽅法
     @classmethod
     def ⽅法名4(cls, 其它形参):
         编写该⽅法要实现的具体功能的代码

      # 定义静态⽅法
     @staticmethod
     def ⽅法名5(形参):
         编写该⽅法要实现的具体功能的代码

     # 定义实例⽅法
     def ⽅法名1(self, 其它形参):
         编写该⽅法要实现的具体功能的代码
 
     # 定义实例⽅法
     def ⽅法名2(self, 其它形参):
         编写该⽅法要实现的具体功能的代码
         类中的方法间相互调用,需要使用self.方法名()的方式

Python和c++一个很大的区别是Python中单个对象可以给自己创建类中没有的属性 

比如xiaowei.gender = '女',类中无论是类属性还是对象属性均为定义过gender属性,但在创建对象后可以自己创建。

对象在调用成员时,先到自己的空间中找,若找不到,就去类空间中去找

3、类成员 和 实例成员

实例成员是属于每个对象实例的,每创建⼀个实例,内存中就有⼀ 份独⽴的实例成员,实例成员只能由对象实例来访问调⽤。
类成员是属于整个类的,在创建对象前就已经类成员加载在内存中了,创建某个类的多个实例时,内存中只会有 ⼀份类成员,类成员既可以⽤类来访问调⽤,也可以⽤实例来访问调⽤。
   类方法中只能调用类成员,不能调用实例成员,类方法的调用不依赖对象,所以当需要在对象创     建前完成一些动作,则     可以将其定义为类方法。
● 静态成员与类成员很相似,也只能访问类成员,不能访问对象成员。但又有区别:(1)装饰器名称不同。(2)静态方法无cls参数,更没有self参数,静态方法中要访问类成员,直接用类名.类成员的方式即可

4.魔术方法

python魔法方法详解_python 魔法方法-CSDN博客

__del__()析构函数,当释放对象空间时,就会自动调用__del__()函数,什么时候回释放对象的空间:(1)当普通对象出作用域时。(2)没有任何指针指向它时,会自动启动垃圾回收机制

import sys
# 返回参数中的指针指向的对象有多少个指针指向它
sys.getrefcount(指针)

del p # p是指针,表示删除p对指向对象的引用

5、私有化

类中成员名以__开头,即表示私有,一般设置对象属性为私有,并设置公有方法get()访问私有属性,set()修改私有属性,好处是方法内可以有if判断修改是否合理,不合理就不让修改

Python中的私有属性其实是伪私有,只要属性名以__开头,底层其实只是将属性重命名为

_所属类名__属性名,用对象._所属类名__属性名的方式在类外界依然可以访问到私有属性

dir()函数用于查看类公有成员或对象公有成员,返回值类型是list

print(dir(类名或对象名))

装饰器@property用于让私有属性的访问方式看起来像公有属性一样,但又有判断

class Student():
    def __init__(self, name, age):
        self.name = name
        self.__age =  age #私有属性__age
    
    @property
    def age(self): # 相当于get方法
        return self.__age

    @age.setter #依赖第一个age方法
    def age(self, age):  # 相当于set方法
        if age > 0 and age < 120:
            self.__age = age
        else:
            print('输入的年龄不合理')

s = Student('小明', 21)
s.age = 130 #实际调用的是第2个age方法,会打印出输入的年龄不合理
print(s.age)    #实际调用的时第1个age方法,会打印出21

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值