面向对象编程(OOP)是一种基于“对象”概念的编程范式。在OOP中,对象被定义为具有一组属性/特性。OOP之所以重要,是因为它帮助开发者编写清晰、模块化的代码,这些代码可以在开发过程中被重用。模块化编码使能够控制函数和模块,这在大型应用开发中尤为重要。
如果是初学者,花一些时间理解以下术语是很重要的。类是具有一组预定义属性的对象的自定义蓝图,这些属性对所有对象都是共同的。实例/对象是从类创建的个体实体。构造方法在OOP中是一个特殊的函数,用于初始化属性。在其他编程语言中,它被称为构造器。
创建一个类:使用class语句可以创建一个新类,并给定一个类名。在Python中,类名遵循帕斯卡命名法,即每个单词都以大写字母开头,不使用任何特殊字符。初始化属性/变量:使用n个属性初始化对象,即attr1、attr2等。创建方法:方法是基于规则的函数集合,这些规则定义了对象的行为。创建了两个方法,分别命名为method1和method2。根据需要选择方法输入。这里,method1除了对象本身外不接受任何输入,而method2接受self.attr2并对其进行操作。
class ClassName:
def __init__(self, attr1, attr2):
self.attr1 = attr1
self.attr2 = attr2
def method1(self):
pass
def method2(self, attr2):
pass
class BlogathonAuthors:
def __init__(self, author_name, num_articles):
self.author_name = author_name
self.num_articles = num_articles
print("Created new author object")
def show(self):
"""This method prints the details of the author"""
print("In show method")
print(f"Author Name: {self.author_name}\nNum of published articles: {self.num_articles}")
def update(self, num_articles):
"""This method updates the number of published articles"""
print("In update method")
self.num_articles = num_articles
从类创建实例或对象的过程称为实例化。在创建对象时,应该传递在构造方法中定义的参数。
author1 = BlogathonAuthors("Harika", 10)
author2 = BlogathonAuthors("Joey", 23)
访问属性的语法是object.attribute。名字通过author1.author_name访问,文章数量通过author1.num_articles访问。不仅可以显示这些值,还可以更改它们。
author1.num_articles = 9
调用方法有两种方式:ClassName.method(object)或object.method()。调用show方法以显示author1的信息。
BlogathonAuthors.show(author1)
author1.show()
如果熟悉Python中的函数,可能会怀疑“show”方法接受一个参数,但没有传递任何参数。思考一下这里发生了什么,然后继续阅读以了解答案。show(self)方法接受一个参数,即对象本身。这里的self关键字指向类/对象的实例。因此,当调用object.method()时,实际上是将对象作为参数传递。
现在,调用update方法并更改文章数量。
author1.update(20)
更新后,如果查看author1的详细信息,文章数量将变为20。
class BlogathonAuthors:
type = "freelancer"
def __init__(self, author_name, num_articles):
self.author_name = author_name
self.num_articles = num_articles
print("Created new author object")
def show(self):
"""This method prints the details of the author"""
print("In show method")
print(f"Author Name: {self.author_name}\nNum of published articles: {self.num_articles}\nType of Work: {BlogathonAuthors.type}")
def update(self, num_articles):
"""This method updates the number of published articles"""
print("In update method")
self.num_articles = num_articles
def total_articles(self, draft):
total = self.num_articles + draft
print(f"Total articles are: {total}")
@classmethod
def return_type(cls):
return cls.type
@staticmethod
def stat_method():
print("I am a static method")
BlogathonAuthors.return_type()
BlogathonAuthors.stat_method()