python第十课

类的定义和使用

定义语法

Python 中使用 class 关键字来定义类,class关键字之后是一个空格,然后是类的名字,再后是一个冒号,最后换行并定类的内部实现。

例子

class Car:
    def infor(self):
        print("This is a car")

定义了类之后,可以用来实例化对象,并通过“对象名.成员”的方式来访问其中的数据成员或成员方法。
例子

class Car:
    def infor(self):
        print("This is a car")
car=Car()
car.infor()

python 提供了一个关键字 pass,表示空语句,可以用在函数和类的定义中或者选择结构、循环结构中。当暂时没有确定如何实现功能,或者为以后的软件升级预留空间时,可以使用该关键字来“占位”。
例子:

class A:
    pass


def demo():
    pass


if 5 > 3:
    pass

self 参数

类的所有实例方法都必须至少有一个名为 self 的参数,并且必须是方法的第一个形参(如果有多个形参),self参数代表对象本身。在类的实例方法中访问实例属性时需要以self为前缀,但在外部通过对象名调用对象方法时并不需要传递这个参数,如果再外部通过类名调用对象方法则需要显式为 self 参数传值。

类成员与实例成员

这里主要指数据成员,或者广义上的属性。可以说属性有两种:一种时实列属性,另一种是类属性。实例属性一般是指在构造函数__init__() 中定义的,定义和使用时必须以 self 作为前缀;类属性是类中所有方法之外定义的数据成员。在主程序中(或类的外部),实例属性属于实例(对象),只能通过对象名访问;而类属性属于类,可以通过类名或对象名访问。
在python中可以动态的为类和对象增加成员。
例子:

class Car:
    price = 10000  # 类属性

    def __init__(self, c):  # 实例属性
        self.color = c


car1 = Car("red")  # 实例化属性
car2 = Car("blue")
print(car1.color, Car.price)
Car.price = 1111111  # 修改类属性
Car.name = 'QQ'  # 增加类属性
car1.color = 'yellow'  # 修改实例属性
print(car2.color, Car.price, Car.name)
print(car1.color, Car.price, Car.name)

在这里插入图片描述

私有成员和公有成员

Python并没有对私有成员提供严格的访问保护机制。
在定义类的成员时,如果成员名以两个下划线“__”或更多下划线开头而不以两个或更多下划线结束则表示是私有成员。

私有成员在类的外部不能直接访问,需要通过调用对象的公有成员方法来访问,也可以通过Python支持的特殊方式来访问。

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

class A:
    def __init__(self, value1=0, value2=0):
        self._value1 = value1
        self.__value2 = value2

    def setValue(self, value1, value2):
        self._value1 = value1
        self.__value2 = value2

    def show(self):
        print(self._value1)
        print(self.__value2)


a = A()
print(a._value1)

print(a._A__value2)  # 在外部访问对象的私有数据成员

在这里插入图片描述

方法

在类中定义的方法可以粗略分为四大类:公有方法、私有方法、静态方法和类方法。
私有方法的名字以两个下划线“__”开始,每个对象都有自己的公有方法和私有方法,在这两类方法中可以访问属于类和对象的成员;
公有方法通过对象名直接调用,私有方法不能通过对象名直接调用,只能在属于对象的方法中通过self调用或在外部通过Python支持的特殊方式来调用。
如果通过类名来调用属于对象的公有方法,需要显式为该方法的self参数传递一个对象名,用来明确指定访问哪个对象的数据成员。
静态方法和类方法都可以通过类名和对象名调用,但不能直接访问属于对象的成员,只能访问属于类的成员。
静态方法可以没有参数。
一般将cls作为类方法的第一个参数名称,但也可以使用其他的名字作为参数,并且在调用类方法时不需要为该参数传递值。

继承

继承是用来实现代码复用和设计复用的机制,是面向对象程序设计的重要特性之一。设计一个新类时,如果可以继承一个已有的设计良好的类然后进行二次开发,无疑会大幅度减少开发工作量。
在继承关系中,已有的、设计好的类称为父类或基类,新设计的类称为子类或派生类。

类继承语法规则:
class Subclass (SuperClass):

如果没有明确写明父类,则该类默认为Object的子类。所有的类都是通过直接或间接地继承object得到的。

支持多继承
class Subclass (SuperClassA, SuperClassB):

子类继承了父类,就继承了父类的方法和属性。
可以修改父类的状态或重载父类的行为
可以添加新的状态和行为。
关于继承的规则:
子类不能直接访问父类中私有的(private)的成员变量和方法。

1.子类不重写 init,实例化子类时,会自动调用父类定义的 init

2.子类重写了父类的__init__ 时,实例化子类,就不会调用父类已经定义的__init__

3.如果子类重写了父类的__init__ 时,要继承父类的构造方法,可以使用 super 关键字
方法一:super(子类,self).init(参数1,参数2,…)
方法二:父类名称.init(self,参数1,参数2,…)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值