Python基础 5.类

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还支持多重继承、类属性和实例属性、静态方法和类方法等特性,应该根据实际情况合理使用。

后端开发标签