Python 是一种面向对象的编程语言。这意味着几乎所有代码都是使用称为类的特殊构造来实现的。类是用于创建对象的代码模板。
Python 中的类和对象是什么?
- 类:类是用户定义的数据结构,它将对象的属性和方法绑定到单个单元中。类是创建对象的代码模板。使用类,您可以创建任意数量的对象。
- 对象:对象是类的实例。它是属性(变量)和方法的集合。我们使用类的对象来执行操作。
对象有两个特征:属性和方法。属性定义了对象的特征,而方法定义了对象的行为。这两者共同构成了对象的本质,使得每个对象都可以在程序中执行特定的任务和操作。
简而言之,每个对象都具有以下属性。
- 身份:每个对象都必须唯一标识。
- 状态:对象有一个属性,表示对象的状态,也反映了对象的属性。
- 行为:对象具有表示其行为的方法。
Python 是一种面向对象的编程语言,因此 Python 中的所有内容都被视为对象。对象是现实生活中的实体。它是各种数据和对这些数据进行操作的函数的集合。
例如,如果我们根据 Person 的状态和行为设计一个类,那么状态可以表示为实例变量,行为可以表示为类方法。
类和对象的现实示例。
Class: Person
State: Name, Sex, Profession
Behavior: Working, Study
使用上面的类,我们可以创建多个描述不同状态和行为的对象。
Object 1: Jessa
State:
Name: Jessa
Sex: Female
Profession: Software Engineer
Behavior:
Working: She is working as a software developer at ABC Company
Study: She studies 2 hours a day
Object 2: Jon
State:
Name: Jon
Sex: Male
Profession: Doctor
Behavior:
Working: He is working as a doctor
Study: He studies 5 hours a day
如您所见,Jessa 是女性,她是一名软件工程师。另一方面,乔恩是一名男性,而且是一名律师。在这里,两个对象都是从同一个类创建的,但它们具有不同的状态和行为。
在 Python 中创建一个类
在Python中,类是通过使用class
关键字来定义的。下面给出了创建类的语法。
语法:
class class_name:
'''This is a docstring. I have created a new class'''
<statement 1>
<statement 2>
.
.
<statement N>
class_name
: 这是类的名称Docstring
:它是类中的第一个字符串,包含类的简要描述。虽然不是强制性的,但强烈建议这样做。statements
:属性和方法
示例:在 Python 中定义一个类
在此示例中,我们将创建一个包含姓名、性别和职业实例变量的 Person 类。
class Person:
def __init__(self, name, sex, profession):
# data members (instance variables)
self.name = name
self.sex = sex
self.profession = profession
# Behavior (instance methods)
def show(self):
print('Name:', self.name, 'Sex:', self.sex, 'Profession:', self.profession)
# Behavior (instance methods)
def work(self):
print(self.name, 'working as a', self.profession)
创建类的对象
对象对于使用类属性至关重要。该对象是使用类名创建的。当我们创建类的对象时,称为实例化。对象也称为类的实例。
构造函数是用于创建和初始化类对象的特殊方法。该方法是在类中定义的。
在Python中,对象创建分为对象创建和对象初始化两个部分
- 在内部,
__new__
是创建对象的方法 - 并且,使用该
__init__()
方法我们可以实现构造函数来初始化对象。
语法:
<object-name> = <class-name>(<arguments>)
下面是创建 Person 类对象的代码
jessa = Person('Jessa', 'Female', 'Software Engineer')
完整的例子:
class Person:
def __init__(self, name, sex, profession):
# data members (instance variables)
self.name = name
self.sex = sex
self.profession = profession
# Behavior (instance methods)
def show(self):
print('Name:', self.name, 'Sex:', self.sex, 'Profession:', self.profession)
# Behavior (instance methods)
def work(self):
print(self.name, 'working as a', self.profession)
# create object of a class
jessa = Person('Jessa', 'Female', 'Software Engineer')
# call methods
jessa.show()
jessa.work()
输出:
Name: Jessa Sex: Female Profession: Software Engineer
Jessa working as a Software Engineer
类属性
当我们设计一个类时,我们使用实例变量和类变量。
在Class中,属性可以定义为两部分:
- 实例变量:实例变量是附加到类实例的属性。我们在构造函数(
__init__()
类的方法)中定义实例变量。 - 类变量:类变量是在类内部但在任何实例方法或方法外部声明的变量
__init__()
。
对象不共享实例属性。相反,每个对象都有其实例属性的副本,并且对于每个对象来说都是唯一的。
类的所有实例共享类变量。然而,与实例变量不同的是,类变量的值在对象与对象之间是不变的。
只会创建静态变量的一份副本,并在该类的所有对象之间共享。
访问属性并赋值
- 可以使用点符号来访问或修改实例属性:
instance_name.attribute_name
。 - 使用类名访问或修改类变量
例子:
class Student:
# class variables
school_name = 'ABC School'
# constructor
def __init__(self, name, age):
# instance variables
self.name = name
self.age = age
s1 = Student("Harry", 12)
# access instance variables
print('Student:', s1.name, s1.age)
# access class variable
print('School name:', Student.school_name)
# Modify instance variables
s1.name = 'Jessa'
s1.age = 14
print('Student:', s1.name, s1.age)
# Modify class variables
Student.school_name = 'XYZ School'
print('School name:', Student.school_name)
输出:
Student: Harry 12
School name: ABC School
Student: Jessa 14
School name: XYZ School
类方法
在 面向对象编程中,在类内部,我们可以定义以下三种类型的方法。
- 实例方法:用于访问或修改对象状态。如果我们在方法中使用 实例变量 ,则此类方法称为实例方法。
- 类方法:用于访问或修改类状态。在方法实现中,如果我们只使用 类变量,那么这种类型的方法我们应该声明为类方法。
- 静态方法:它是一种独立执行任务的通用实用方法。在此方法中,我们不使用实例或类变量,因为此静态方法无法访问类属性。
实例方法在实例级别(对象级别)上工作。例如,如果我们有两个从学生类创建的对象,它们可能有不同的名称、分数、学号等。使用实例方法,我们可以访问和修改实例变量。
类方法绑定到类 而不是类的对象。它只能访问类变量。
示例:定义并调用实例方法和类方法
# class methods demo
class Student:
# class variable
school_name = 'ABC School'
# constructor
def __init__(self, name, age):
# instance variables
self.name = name
self.age = age
# instance method
def show(self):
# access instance variables and class variables
print('Student:', self.name, self.age, Student.school_name)
# instance method
def change_age(self, new_age):
# modify instance variable
self.age = new_age
# class method
@classmethod
def modify_school_name(cls, new_name):
# modify class variable
cls.school_name = new_name
s1 = Student("Harry", 12)
# call instance methods
s1.show()
s1.change_age(14)
# call class method
Student.modify_school_name('XYZ School')
# call instance methods
s1.show()
输出:
Student: Harry 12 ABC School
Student: Harry 14 XYZ School
类命名约定
为了提高可读性,命名约定在任何编程语言中都是必不可少的。如果我们给出一个合理的名称,它将节省我们以后的时间和精力。编写可读的代码是 Python 语言的指导原则之一。
在为 Python 中的类命名时,我们应该遵循特定的规则。
- 规则 1:类名称应遵循UpperCaseCamelCase约定
- 规则 2:异常类应以“ Error ”结尾。
- 规则 3:如果一个类是可调用的(从某处调用该类),在这种情况下,我们可以像函数一样给出一个类名。
- 规则 4:Python 的内置类通常是小写单词。
对象属性
每个对象都有其属性。换句话说,我们可以说对象属性是名称和值之间的关联。
例如,汽车是一个对象,其属性有汽车颜色、天窗、价格、制造商、型号、发动机等。在这里,颜色是名称,红色是值。对象属性只不过是实例变量。
修改对象属性
每个对象都有与其相关的属性。我们可以在对象初始化后通过使用点运算符直接调用属性来设置或修改对象的属性。
例子:
class Fruit:
def __init__(self, name, color):
self.name = name
self.color = color
def show(self):
print("Fruit is", self.name, "and Color is", self.color)
# creating object of the class
obj = Fruit("Apple", "red")
# Modifying Object Properties
obj.name = "strawberry"
# calling the instance method using the object obj
obj.show()
# Output Fruit is strawberry and Color is red
删除对象属性
我们可以使用del关键字删除对象属性。删除后,如果我们尝试访问它,就会出现错误。
class Fruit:
def __init__(self, name, color):
self.name = name
self.color = color
def show(self):
print("Fruit is", self.name, "and Color is", self.color)
# creating object of the class
obj = Fruit("Apple", "red")
# Deleting Object Properties
del obj.name
# Accessing object properties after deleting
print(obj.name)
# Output: AttributeError: 'Fruit' object has no attribute 'name'
例子:
class Fruit:
def __init__(self, name, color):
self.name = name
self.color = color
def show(self):
print("Fruit is", self.name, "and Color is", self.color)
# creating object of the class
obj = Fruit("Apple", "red")
# Modifying Object Properties
obj.name = "strawberry"
# calling the instance method using the object obj
obj.show()
# Output Fruit is strawberry and Color is red
在上面的示例中,正如我们所看到的,当我们尝试打印或访问该属性时,属性名称已被删除,并收到错误消息。
删除对象
在Python中,我们还可以使用关键字来删除对象del
。对象可以是类对象、list
、tuple
、set
等任何东西。
del object_name
示例:删除对象
class Employee:
depatment = "IT"
def show(self):
print("Department is ", self.depatment)
emp = Employee()
emp.show()
# delete object
del emp
# Accessing after delete object
emp.show()
# Output : NameError: name 'emp' is not defined
在上面的例子中,我们创建了emp类的对象Employee。之后,使用del关键字,我们删除了该对象。
原创文章,作者:jkhxw,如若转载,请注明出处:https://www.jkhxw.com/python-classes-and-objects/