第十六篇~

面向对象程序设计(一)

一、类的定义与使用
1.1 类定义语法
  • Python使用class关键字来定义类,class关键字之后是一个空格,然后是类的名字,再然后是一个冒号,最后换行并定义类的内部实现。如:
class Car:          #定义类
      def infor(self):        #成员方法
            print("This is a car")
  • 定义类之后,可以实例化对象,并通过“对象名.成员”的方式来访问其中的数据成员或成员方法
  • 可以使用内置方法isinstance()来测试一个对象是否为某个对象的示例
  • 关键字pass表示空语句,可以在类和函数的定义中或者选择结构、循环结构中
1.2 self参数
  • 类的所有实例方法必须至少有一个名为self的参数,并且必须是方法的第一个形参(如果有多个形参的话),self参数代表将来要创建的对象本身
    在类的实例方法中访问实例属性时需要以self为前缀。
    在外部通过对象调用对象方法时并不需要传递这个参数,如果在外部通过调用对象方法则需要显式为self参数传值。
1.3 类成员与实例成员

这里主要指数据成员,或者广义上的属性,可以说属性有两种:一种是实例属性,一种是类属性

  • 属于实例的数据成员一般是指在构造函数__init__()中定义的,定义和使用时必须以self作为前缀;属于类的数据成员是在类中所有方法之外定义的。
  • 在主程序中(或类的外部),实例属性属于实例(对象),只能通过对象名访问;而类属性属于类,可以通过类名或对象名都可以访问
  • 在实例方法中可以调用该实例的其他方法,也可以访问类属性以及实例属性。
  • 在Python中比较特殊的是,可以动态地为自定义类和对象增加或删除成员,这一点是和很多面向对象程序设计语言不同的,也是Python动态类型特点的一种重要体现
class Car:
    price = 100000                     #定义类属性
    def __init__(self, c):
        self.color = c                 #定义实例属性

car1 = Car("Red")                      #实例化对象
car2 = Car("Blue")
print(car1.color, Car.price)           #查看实例属性和类属性的值
Car.price = 110000                     #修改类属性
Car.name = 'QQ'                        #动态增加类属性
car1.color = "Yellow"                   #修改实例属性
#del Car.price                         #删除类属性             
print(car2.color, Car.price, Car.name)
print(car1.color, Car.price, Car.name)
import types

def setSpeed(self, s): 
    self.speed = s

car1.setSpeed = types.MethodType(setSpeed, car1) #动态增加成员方法
car1.setSpeed(50)                                #调用成员方法
print(car1.speed)
1.4 私有成员与公有成员
  • Python并没有对私有成员提供严格的访问保护机制。
1.4.1私有成员:

(1)在定义类的成员时,如果成员名以两个下划线“__”或更多下划线开头而不以两个或更多下划线结束则表示是私有成员。
(2)私有成员````在类的外部不能直接访问,需要通过调用对象的公有成员方法来访问,也可以通过Python支持的特殊方式```来访问。

1.4.2 公有成员

公有成员既可以在类的内部进行访问,也可以在外部程序中使用。

1.4.3 以下画线开头的变量名和方法名

在Python中,以下划线开头的变量名和方法名有特殊的含义,尤其是在类的定义中。

  • _xxx:受保护成员,不能用’from module import *'导入;
  • xxx:系统定义的特殊成员;
  • __xxx:私有成员,只有类对象自己能访问,子类对象不能直接访问到这个成员,但在对象外部可以通过“对象名._类名__xxx”这样的特殊方式来访问。
    注意:Python中不存在严格意义上的私有成员。
二、方法
  • 在类中定义的方法可以粗略分为四大类:公有方法、私有方法、静态方法和类方法。
2.1私有方法
  • 私有方法的名字以两个下划线“__”开始,每个对象都有自己的公有方法和私有方法,在这两类方法中可以访问属于类和对象的成员;
2.2公有方法
  • 公有方法通过对象名直接调用,私有方法不能通过对象名直接调用,只能在属于对象的方法中通过self调用或在外部通过Python支持的特殊方式来调用。
    如果通过类名来调用属于对象的公有方法,需要显式为该方法的self参数传递一个对象名,用来明确指定访问哪个对象的数据成员。
2.3静态方法
  • 静态方法和类方法都可以通过类名和对象名调用,但不能直接访问属于对象的成员,只能访问属于类的成员。
  • 静态方法可以没有参数。
2.4 类方法
  • 一般将cls作为类方法的第一个参数名称,但也可以使用其他的名字作为参数,并且在调用类方法时不需要为该参数传递值。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值