Python 类详解及简单实例
类和实例
在Python中,我们使用class
来定义一个类,实例化一个类得到一个对象,这是面向对象编程的基本概念。
class MyClass:
pass
my_instance = MyClass() # 实例化一个对象
我们可以使用type()
函数来查看对象的类型,如:
print(type(my_instance)) # <class '__main__.MyClass'>
当我们实例化一个对象时,Python解释器会自动调用对象的构造函数__init__()
,该函数可以接收除self(当前对象)以外的任何参数。
class MyClass:
def __init__(self, name):
self.name = name
my_instance = MyClass('Jack')
print(my_instance.name) # Jack
属性和方法
类包含属性和方法这两个核心元素。
属性
属性是类中的变量,通过.
来访问。
class MyClass:
class_var = 0 # 类变量,所有类的实例共享
def __init__(self, name):
self.name = name # 实例变量,每个实例都独有
my_instance_1 = MyClass('Jack')
my_instance_2 = MyClass('Rose')
print(my_instance_1.class_var) # 0
print(my_instance_2.class_var) # 0
my_instance_1.class_var = 1
print(my_instance_1.class_var) # 1
print(my_instance_2.class_var) # 0
方法
方法是类中的函数,方法包括普通方法和类方法。
普通方法
普通方法第一个参数默认为实例本身,通常以self
作为名字。
class MyClass:
def __init__(self, name):
self.name = name
def greet(self):
print(f'Hello, {self.name}!')
my_instance = MyClass('Jack')
my_instance.greet() # Hello, Jack!
类方法
类方法的第一个参数默认为类本身,通常以cls
作为名字,使用@classmethod
装饰器来定义。
class MyClass:
class_var = 0
@classmethod
def class_method(cls):
cls.class_var += 1
my_instance_1 = MyClass()
my_instance_2 = MyClass()
MyClass.class_method() # 修改类变量
print(my_instance_1.class_var) # 1
print(my_instance_2.class_var) # 1
继承
在Python中,我们使用()
来指定继承的父类。
class BaseClass:
def __init__(self, name):
self.name = name
def greet(self):
print(f'Hello, {self.name}!')
class SubClass(BaseClass):
def greet(self):
print(f'Hi, {self.name}!')
my_instance_1 = BaseClass('Jack')
my_instance_2 = SubClass('Rose')
my_instance_1.greet() # Hello, Jack!
my_instance_2.greet() # Hi, Rose!
子类可以重写父类的方法和属性,如上面代码中,子类重写了greet()
方法。
示例一:模拟银行账户
假设我们要模拟银行账户,每个账户有账号和金额两个属性,有取款和存款两个操作。
class BankAccount:
def __init__(self, account, balance=0):
self.account = account
self.balance = balance
def deposit(self, amount):
self.balance += amount
print(f'Deposited {amount} yuan, now balance is {self.balance} yuan.')
def withdraw(self, amount):
if amount <= self.balance:
self.balance -= amount
print(f'Withdrawn {amount} yuan, now balance is {self.balance} yuan.')
else:
print(f'The balance is not enough, current balance is {self.balance} yuan.')
my_account = BankAccount('123456')
my_account.deposit(1000) # Deposited 1000 yuan, now balance is 1000 yuan.
my_account.withdraw(500) # Withdrawn 500 yuan, now balance is 500 yuan.
my_account.withdraw(1000) # The balance is not enough, current balance is 500 yuan.
示例二:继承与多态
假设我们要模拟几何形体,有圆形和矩形两种形状,有get_area()
获取面积的操作。
class GeometricShape:
def get_area(self):
return 0
class Circle(GeometricShape):
def __init__(self, r):
self.r = r
def get_area(self):
return 3.14 * self.r ** 2
class Rectangle(GeometricShape):
def __init__(self, a, b):
self.a = a
self.b = b
def get_area(self):
return self.a * self.b
my_circle = Circle(5)
my_rectangle = Rectangle(3, 4)
print(my_circle.get_area()) # 78.5
print(my_rectangle.get_area()) # 12
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 类详解及简单实例 - Python技术站