Python Class类型是一种用于面向对象程序设计的数据类型。在Python中,一个类定义了一组属性和方法,属性是数据成员,方法是操作数据的函数。一个类实例化后产生的对象,可以调用其属性和方法进行操作。
一、什么是面向对象编程?
面向对象编程是一种编程范式,它将数据和操作数据的方法打包在一起,形成一个对象。面向对象编程强调的是程序的结构和数据的封装性,它利用“类”和“对象”这两个基本的概念,封装方法和数据成员,实现代码复用性和可维护性。
在Python中,使用class关键字定义一个类,类名的第一个字母大写。类中的方法需要有一个self参数,用于引用对象本身。
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
print(f"{self.name} is barking.")
以上是定义一个Dog类的示例代码,其中有一个构造方法__init__用于初始化类的属性,还有一个bark方法用于让狗叫。
二、Python Class类型的属性和方法
在Python中,类和对象都可以有属性和方法。属性是类或者对象的数据成员,方法是对数据进行操作的代码块。
Python Class类型的属性和方法都可以使用点号(.)来访问。在类中,属性和方法都可以被继承,子类可以重写父类的属性和方法。
class Student:
def __init__(self, name, score):
self.name = name
self.score = score
def hi(self):
print(f"My name is {self.name}, My score is {self.score}.")
class GoodStudent(Student):
def __init__(self, name, score, grade):
super().__init__(name, score)
self.grade = grade
def hi(self):
super().hi()
print(f"My grade is {self.grade}.")
以上示例代码定义了一个Student类和一个GoodStudent类,GoodStudent类继承自Student类。GoodStudent类重写了hi方法,在原有的基础上增加了grade属性的打印部分。
三、Python Class类型的继承
Python Class类型的继承是指一个派生类(子类)从一个基类(父类)继承属性和方法。子类可以在不改变原有父类的属性和方法的情况下增加或者修改属性和方法,实现代码复用性和可维护性。
class Circle:
def __init__(self, r):
self.r = r
def area(self):
return 3.14 * self.r * self.r
class Sphere(Circle):
def area(self):
return 4 * 3.14 * self.r * self.r
def volume(self):
return 4 / 3 * 3.14 * self.r * self.r * self.r
以上示例代码定义了一个Circle类表示圆,定义一个Sphere类表示球,Sphere类继承自Circle类。Sphere类重写了area方法,增加了volume方法。
四、Python Class类型的多重继承
Python Class类型也支持多重继承,即一个子类可以同时继承多个父类的属性和方法。使用多重继承可以实现更加灵活的代码结构。
class A:
def a(self):
print("A.a")
class B:
def b(self):
print("B.b")
class C(A, B):
def c(self):
print("C.c")
以上示例代码定义了一个A类和一个B类,C类继承了A类和B类,同时增加了c方法。
五、Python Class类型的封装
Python Class类型的封装是指将类的属性和方法全部都隐藏起来,不允许外部直接访问,只能通过类提供的接口来间接访问。Python中,可以利用__开头定义一个私有属性或者方法,外部不能直接访问,只能在类内部访问。
class Account:
def __init__(self, name, balance):
self.name = name
self.__balance = balance
def deposit(self, amt):
self.__balance += amt
def withdraw(self, amt):
if amt <= self.__balance:
self.__balance -= amt
else:
print("Not enough balance.")
def get_balance(self):
return self.__balance
以上示例代码实现了一个简单的银行账户类:Account。Account类定义了私有属性__balance来封装账户余额。外部无法直接访问__balance,只能通过deposit方法存款、withdraw方法取款或者get_balance方法查询余额。