✍ 个人博客:https://blog.csdn.net/Newin2020?type=blog
专栏地址:https://blog.csdn.net/newin2020/category_12801353.html
专栏定位:为 0 基础刚入门 Python 的小伙伴提供详细的讲解,也欢迎大佬们一起交流~
专栏简介:在这个专栏,我将带着大家从 0 开始入门 Python 的学习。在这个 Python 的新人系列专栏下,将会总结 Python 入门基础的一些知识点,方便大家快速入门学习~
❤️ 如果有收获的话,欢迎点赞 收藏 关注,您的支持就是我创作的最大动力
两类软件开发设计方法:
面向对象编程的 2 个非常重要的概念:类和对象。类也有属性和行为两个部分组成,而对象是类的具体实例。
可以将类想象成一个模具,它规定了用它制造出来的东西(对象)应该具有的特征和能执行的操作。
例如,定义一个 “学生” 类,可能包含学生的姓名、年龄、学号等属性,以及获取成绩、修改个人信息等方法。
也就是说,通过类这个模具创建出来的一个个具体的个体就是对象。
比如根据 “学生” 类创建出来的具体的某个学生小明,他有自己具体的姓名、年龄和学号等属性值,并且能执行类中定义的方法。
对象具有自己独立的状态(由其属性值决定),并且可以通过调用其方法来执行相关操作,与其他对象进行交互和协作,以完成程序的功能。
类由 3 个部分构成:
抽象技巧: 拥有相同(或者类似)属性和行为的对象都可以抽象成一个类。
定义类有 2 种形式:新式类和经典类
使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾。
class ClassName:
'类的帮助信息' # 类文档字符串
class_suite # 类体
class ClassName(object):
'类的帮助信息' # 类文档字符串
class_suite # 类体
Tips:经典类和新式类的区别
在 Python 2.x 中,经典类和新式类的区别:
对象名1 = 类名()
对象名2 = 类名()
对象名3 = 类名()
首字母大写的名称指的是类,并且建议使用驼峰式命名法。
类中的实例方法与普通的函数只有一个特别的区别 —— 它们必须有有一个额外的第一个参数名称,按照惯例它的名称是 self。self 代表类的实例,self 在定义类的实例方法时是必须有的,虽然在调用时不必传入相应的参数。
class Dog:
def __init__(self, name, age):
# 类内初始化方法中定义属性
self.name = name
self.age = age
self.fur_colour = 'white' # 默认值
def sit(self):
print(f"{self.name} is now sitting.")
def roll_over(self):
print(f"{self.name} rolled over!")
def paw_colour(self, colour):
self.paw_colour = colour # 类内方法中定义属性
# 创建对象
my_dog = Dog('Willie', 6)
# 类外定义对象的属性
my_dog.eye_colour = 'blue'
Tips:
self 名称只是通用的名称,可以使用自定义的名称代替 self,但要保证类方法中的该名称都要保持一致。
另外需要注意的是,不能通过类名称调用实例变量,例如 Dog.name 这样的调用是不被允许的。
class Dog:
host = 'john' # 定义类变量
def __init__(self, name, age):
# 类内初始化方法中定义属性
self.name = name
self.age = age
self.fur_colour = 'white' # 默认值
def sit(self):
print(f"{self.name} is now sitting.")
def roll_over(self):
print(f"{self.name} rolled over!")
def paw_colour(self, colour):
self.paw_colour = colour # 类内方法中定义属性
def find_host(self):
print(f"{self.name}'s host is {self.host}.") # 类变量使用方法一(Willie's host is john.)
print(f"{Dog.host} is really nice!") # 类变量使用方法二(john is really nice!)
# 创建对象
my_dog = Dog('Willie', 6)
# 类外定义对象的属性
my_dog.eye_colour = 'blue'
# 使用类变量
my_dog.find_host()
print(Dog.host) # john
class Dog:
--snip--
# 创建对象
my_dog = Dog('Willie', 6)
# 调用属性
print(f"My dog's name is {my_dog.name}.") # My dog's name is Willie.
print(f"My dog is {my_dog.age} years old.") # My dog is 6 years old.
my_dog.fur_colour = 'brown' # 直接修改属性
print(my_dog.fur_colour) # brown
# 调用方法
my_dog.sit() # Willie is now sitting.
my_dog.roll_over() # Willie rolled over!
my_dog.paw_colour('black') # 通过方法修改属性的值
print(my_dog.paw_colour) # black
init( ) 方法是 Python 中一种特殊的方法,被称为类的构造函数或初始化法,当创建了这个类的实例时就会调用该方法。
class Dog:
def __init__(self, name, age):
# 类内初始化方法中定义属性
self.name = name
self.age = age
self.fur_colour = 'white' # 默认值
删除触发时机:
class Dog:
def __init__(self, name, age):
# 类内初始化方法中定义属性
self.name = name
self.age = age
self.fur_colour = 'white' # 默认值
# 当对象被删除时,会自动被调用
def __del__(self):
print("__del__方法被调用")
print(f"{self.name} 去狗狗天堂了...")
在类的内部,使用 def 关键字来定义一个方法,而类中一共有三类方法:
定义:第一个参数必须是实例对象,该参数名一般约定为 “self”,通过它来传递实例的属性和方法(也可以传类的属性和方法)。
调用方式:只能由实例对象调用。
应用场景:用于处理与特定实例相关的操作和逻辑,通常是对实例数据进行操作或执行依赖于实例状态的任务。
class Person:
def __init__(self, name, gender):
self.name = name
self.gender = gender
# 实例方法,必须要实例化才能使用
def get_name(self):
return self.name
# 实例方法,必须要实例化才能使用
def get_gender(self):
return self.gender
# 修改self名称
def _get_name(test):
return test.name
# 调用实例方法的第一种写法:直接用类名+实例化调用
print(Person("张三", "男").get_name()) # 但是这种方法实例没有存到变量里面,所以只能使用一次
print(Person("张三", "男").get_gender())
# 调用实例方法的第二种写法:1.先做实例化;2.用实例名+方法名
teacher = Person("张三", "男") # 实例化
print(teacher.get_name())
print(teacher.get_gender())
print(teacher._get_name())
定义:使用装饰器 @classmethod。第一个参数必须是当前类对象,该参数名一般约定为 “cls”,通过它来传递类的属性和方法(不能传实例的属性和方法)。
调用方式:类和实例对象都可以调用。
应用场景:通常用于处理与类本身相关的操作,例如创建类的不同实例方式、修改类属性等,这些操作不依赖于特定的实例。
class Person:
count = 0 # 类变量
def __init__(self, name, gender):
self.name = name
self.gender = gender
Person.count += 1
def get_name(self):
return self.name
# 加classmethod才能识别为类方法
@classmethod
def get_instance_count(cls):
# return cls.count # 和下行代码同等效果
return Person.count
@classmethod
def create_a_instance(cls):
print("create instance")
return Person("张三", "男") # 类方法里虽然不可以使用实例变量,但是可以创建实例
print(Person.count) # 0
# 用类调用
print(Person.get_instance_count()) # 0
print(Person.create_a_instance().get_name()) # 张三
print(Person.get_instance_count()) # 1
teacher = Person("李四", "男")
print(Person.get_instance_count()) # 2
print(Person.create_a_instance().get_name()) # 张三
定义:使用装饰器 @staticmethod。参数随意,没有 “self” 和 “cls” 参数,但是方法体中不能使用类或实例的任何属性和方法。
调用方式:类和实例对象都可以调用。
应用场景:用于与类相关但不依赖于类或实例状态的辅助功能,通常是一些通用的工具方法,与类的逻辑相关但不需要访问类或实例的数据。
class MyClass:
@staticmethod
def static_method():
print("This is a static method")
# 类调用静态方法
MyClass.static_method()
# 实例对象调用静态方法
test = MyClass()
test.static_method()