Python基础——类与对象
程序员文章站
2024-03-16 10:18:34
...
面向对象是一种抽象,是一种用分类的方式看待问题的方法,用 Java 的编程思想来说就是:万物皆对象;面向对象有三大特性:封装、继承、多态。
一个分类就是一个类,可以把类看作是一个抽象的模板,如:Car 类。
对象是根据类创建出来的一个个实例。
1.类的内置方法与三种方法
Python 创建任何一个类的时候,都会包含一些内置的方法,主要包括如下:
1.1实例方法(需要实例化才能使用的方法):
第一个参数必须要默认传实例对象,一般习惯用self。
# 实例方法(可调类变量、可调实例变量、可被实例调用)
# 第一个参数强制为实例对象 self。
class Car(object):
name = 'BMW'
def __init__(self, name):
self.name = name
def run(self,speed):
print(self.name,speed,'行驶')
# 访问
c = Car("宝马")
c.run("100迈")
1.2类方法(由@classmethod装饰的方法):
类方法是将类本身作为对象进行操作的方法。可以通过类名或类的实例调用,第一个参数必须要默认传类,一般习惯用cls。
'''
类方法(可调类变量、可被实例调用、可被类调用)
1、类方法通过@classmethod装饰器实现,只能访问类变量,不能访问实例变量;
2、通过cls参数传递当前类对象,不需要实例化。
'''
class Car(object):
name = 'BMW'
def __init__(self, name):
self.name = name
@classmethod
def run(cls,speed):
print(cls.name,speed,'行驶')
# 访问方式1
c = Car("宝马")
c.run("100迈")
# 访问方式2
Car.run("100迈")
1.3静态方法(由@staticmethod装饰的方法):
静态方法是类中的函数,不需要实例。可以通过类名或类的实例调用,参数没有要求。
'''
静态方法(可调类变量、可被实例调用、可被类调用)
1、用 @staticmethod 装饰的不带 self 参数的方法;
2、静态方法名义上归类管理,实际中在静态方法中无法访问类和实例中的任何属性;
3、调用时并不需要传递类或实例。
'''
class Car(object):
name = 'BMW'
def __init__(self, name):
self.name = name
@staticmethod
def run(speed):
print(Car.name,speed,'行驶')
# 访问方式1
c = Car("宝马")
c.run("100迈")
# 访问方式2
Car.run("100迈")
2.类的继承
# 基本语法:class ClassName(BaseClassName)
# 父类
class Car(object):
name = 'BMW'
def __init__(self, name):
self.name = name
def run(self,speed):
print(self.name,speed,'行驶')
# 子类
class BMWCar(Car):
conf = "经济适用型"
pass
# 调用父类 Car 中 run 方法
bc = BMWCar("BMW经济适用型轿车")
bc.run("100迈")
3.类的多态
# 父类
class Car(object):
name = 'BMW'
def __init__(self, name):
self.name = name
def run(self,speed):
print('Car-->',self.name,speed,'行驶')
# 子类1
class BMWCar(Car):
def run(self,speed):
print('BMWCar-->',self.name,speed,'行驶')
# 子类2
class SVWCar(Car):
def run(self,speed):
print('SVWCar-->',self.name,speed,'行驶')
# 调用 run 方法
c = Car("Car")
c.run("120迈")
bc = BMWCar("宝马")
bc.run("100迈")
sc = SVWCar("大众")
sc.run("80迈")
# 输出结果
'''
Car--> Car 120迈 行驶
BMWCar--> 宝马 100迈 行驶
SVWCar--> 大众 80迈 行驶
'''
在上面的例子中,我们可以看出:c、bc 、sc 是不同类型的对象,在它们调用 run 方法时,调用的均是各自类中的方法,这就是多态。