1. 类的定义
在Python中,类是面向对象编程的基本概念之一。类是一种用户自定义的数据类型,它可以包含多个属性和方法,每个对象都是该类的一个实例。类的定义方式如下:
class ClassName:
#属性和方法
类名一般采用首字母大写的命名方式,建议使用驼峰式命名。
1.1 类的属性
类的属性用来描述类的特征,可以分为两种:
类属性:是类的所有实例共享的,通常在类中定义,有类名来访问。代码如下:
class Person:
name = 'Tom'
print(Person.name)
输出结果为:
Tom
实例属性:是类的每个实例所独有的,通常在构造方法中定义,有实例名来访问。代码如下:
class Person:
def __init__(self, name):
self.name = name
p = Person('Tom')
print(p.name)
输出结果为:
Tom
1.2 类的方法
类的方法是类所具有的行为,可以分为两种:
类方法:使用@classmethod装饰器修饰,通常用于实现类的特殊功能,比如创建类的实例。代码如下:
class Person:
@classmethod
def from_name(cls, name):
return cls(name)
def __init__(self, name):
self.name = name
p = Person.from_name('Tom')
print(p.name)
输出结果为:
Tom
实例方法:通常用于操作实例属性,并且至少有一个参数(self)指向实例本身,可以使用实例名或类名来调用。代码如下:
class Person:
def __init__(self, name):
self.name = name
def introduce(self):
return 'My name is ' + self.name
p = Person('Tom')
print(p.introduce())
输出结果为:
My name is Tom
2. 继承
Python类支持继承机制,子类可以继承父类的属性和方法,并且可以增加自己的属性和方法。继承的代码如下:
class Animal:
def __init__(self, name):
self.name = name
def move(self):
return 'I can move'
class Dog(Animal):
def sound(self):
return 'Wang! Wang!'
d = Dog('WangCai')
print(d.name)
print(d.move())
print(d.sound())
输出结果为:
WangCai
I can move
Wang! Wang!
子类会继承父类的所有属性和方法,而且可以重写父类的方法,这样就可以实现多态。
3. 多重继承
Python支持多重继承,即一个子类可以继承多个父类的属性和方法。多重继承的代码如下:
class Person:
def __init__(self, name):
self.name = name
class Student(Person):
def study(self):
return 'I am studying'
class Worker(Person):
def work(self):
return 'I am working'
class Intern(Student, Worker):
pass
i = Intern('Tom')
print(i.name)
print(i.study())
print(i.work())
输出结果为:
Tom
I am studying
I am working
多重继承的语法比较复杂,应该根据实际情况合理运用。
4. 类属性和实例属性
类属性和实例属性是Python类的两种属性类型,它们的作用不同,应该根据实际情况合理运用。
4.1 类属性
类属性是属于类的属性,通常用于类的全局变量或者常量,可以用类名或者类的实例来访问,即类的所有实例共享类属性。代码如下:
class Animal:
species = 'mammal'
def __init__(self, name):
self.name = name
a = Animal('Dog')
print(a.species)
输出结果为:
mammal
类属性应该和类名相关,不应该和用户输入的实例名相关。
4.2 实例属性
实例属性是属于实例的属性,通常在构造方法中定义,用于描述每个实例的独有性质。实例属性应该由实例名来访问,即每个实例都拥有该属性。代码如下:
class Animal:
def __init__(self, name):
self.name = name
self.species = 'mammal'
a = Animal('Dog')
print(a.species)
输出结果为:
mammal
实例属性应该由实例名来访问,避免和类属性混淆。
5. 静态方法和类方法
Python类还支持静态方法和类方法,这两种方法都不需要传入self参数,它们的作用是相似的,但是用法不同,应该根据实际情况选择使用。
5.1 静态方法
静态方法通常用于实现和类相关的工具函数,不需要访问实例属性或类属性,可以直接调用。静态方法的代码如下:
class Calculator:
@staticmethod
def add(x, y):
return x + y
print(Calculator.add(1, 2))
输出结果为:
3
静态方法用@staticmethod修饰,可以通过类名或实例名来调用。
5.2 类方法
类方法通常用于实现和类相关的工具函数,需要访问类属性,可以使用cls来访问。类方法的代码如下:
class Calculator:
RATE = 0.8
@classmethod
def discount(cls, price):
return price * cls.RATE
print(Calculator.discount(100))
输出结果为:
80.0
类方法用@classmethod修饰,可以通过类名或实例名来调用,需要传入cls参数来访问类属性。
6. 小结
在Python中,类是面向对象编程的基本概念之一,它可以包含多个属性和方法,每个对象都是该类的一个实例。类支持继承机制,子类可以继承父类的属性和方法,并且可以增加自己的属性和方法。Python还支持多重继承、类属性和实例属性、静态方法和类方法等特性,应该根据实际情况合理使用。