class ExampleClass:class_variable = "I am a class variable"# 构造方法(Constructor)def __init__(self, instance_variable):self.instance_variable = instance_variable# 普通方法(Method)def instance_method(self):print(f"Instance method called with value: {self.instance_variable}")# 类方法(Class Method)@classmethoddef class_method(cls):print(f"Class method called with class variable: {cls.class_variable}")# 静态方法(Static Method)@staticmethoddef static_method():print("Static method called")# 魔术方法(Magic Methodsdef __str__(self):return f"ExampleClass instance with value: {self.instance_variable}"# 创建类的实例
obj = ExampleClass("example")# 调用实例方法
obj.instance_method()# 调用类方法
ExampleClass.class_method()# 调用静态方法
ExampleClass.static_method()# 输出字符串表示
print(obj)
Instance method called with value: example
Class method called with class variable: I am a class variable
Static method called
ExampleClass instance with value: example
1、构造方法(Constructor):
- 构造方法是在创建对象时自动调用的特殊方法。
- 它的主要目的是用于初始化对象的属性或执行对象的一些必要设置。
- 在Python中,构造方法的名称是
__init__
,并且它始终在对象创建后立即调用。 - 构造方法通常用于执行一些对象的初始化工作,例如设置实例变量的初始值。
2、普通方法(Method):
- 普通方法是类中的普通函数,用于执行一些与对象相关的操作。
- 它可以访问类的属性,并且可能修改对象的状态。
- 普通方法没有特殊的名称,可以根据需要定义。
3、类方法(Class Method):
- 类方法是用
@classmethod
装饰器修饰的方法。 - 类方法的第一个参数是类本身,通常被命名为
cls
。 - 类方法可以访问和修改类级别的属性,但不能访问实例级别的属性。
4、静态方法(Static Method):
- 静态方法是用
@staticmethod
装饰器修饰的方法。 - 静态方法与类和实例无关,不接收类或实例作为第一个参数。
- 静态方法不能访问或修改类级别或实例级别的属性。
5、魔术方法(Magic Methods):
- 魔术方法是以双下划线开头和结尾的方法,如
__init__
、__str__
等。 - 这些方法在特定的情况下由解释器调用,用于执行特殊的操作。
- 例如,
__init__
用于对象的初始化,__str__
用于返回对象的字符串表示。
具体例子:
class BankAccount:bank_balance = 0def __init__(self, account_holder, initial_balance=0):self.account_holder = account_holderself.balance = initial_balancedef deposit(self, amount):self.balance += amountprint(f"{self.account_holder} deposited ${amount}. New balance: ${self.balance}")def withdraw(self, amount):if amount <= self.balance:self.balance -= amountprint(f"{self.account_holder} withdrew ${amount}. New balance: ${self.balance}")else:print(f"Insufficient funds for {self.account_holder}. Balance: ${self.balance}")@classmethoddef total_balance(cls):print(f"Total bank balance: ${cls.bank_balance}")@staticmethoddef is_business_hours():# Assume business hours are from 9 AM to 5 PMcurrent_hour = 15 # Just an example, should use current time in a real applicationreturn 9 <= current_hour <= 17def __str__(self):return f"Account Holder: {self.account_holder}, Balance: ${self.balance}"# 创建账户实例
account1 = BankAccount("Alice", 1000)
account2 = BankAccount("Bob", 500)# 存款和取款操作
account1.deposit(200)
account2.withdraw(100)# 类方法 - 查看总余额
BankAccount.total_balance()# 静态方法 - 检查是否是营业时间
print(f"Is it business hours? {'Yes' if BankAccount.is_business_hours() else 'No'}")# 输出账户信息
print(account1)
print(account2)
-
构造方法
__init__
:- 作用: 用于初始化对象的属性,在对象创建时自动调用。
- 参数: 接受
account_holder
(账户持有人)和可选的initial_balance
(初始余额)作为参数。 - 用法: 在创建账户实例时调用,设置账户的初始属性。
-
普通方法
deposit
和withdraw
:- 作用: 执行普通的实例级别操作,分别用于存款和取款。
- 参数:
amount
表示存款或取款的金额。 - 用法: 被调用时会修改实例的
balance
属性,并输出相关信息。
-
类方法
total_balance
:- 作用: 访问和修改类级别的属性,这里用于查看所有账户的总余额。
- 参数:
cls
(类本身)作为第一个参数。 - 用法: 通过类名调用,可以访问和修改类级别的属性。
-
静态方法
is_business_hours
:- 作用: 与类和实例无关的操作,用于检查当前是否是营业时间。
- 参数: 无参数,与类和实例无关。
- 用法: 通过类名或实例名调用,不会访问实例级别的属性。
-
魔术方法
__str__
:- 作用: 定义对象的字符串表示形式,使对象能够以友好的方式呈现。
- 参数: 无参数,除了
self
表示对象本身。 - 用法: 被
print
函数调用,返回对象的字符串表示。
总的来说,这五种方法在类中的作用和使用方式不同。构造方法用于初始化对象,普通方法用于实例级别的操作,类方法用于类级别的操作,静态方法与类和实例无关,而魔术方法用于定义对象的字符串表示。
结果:
# 这里current_hour(假设为15),实际运行时可能会得到不同的输出,具体取决于实际的运行时间。
Alice deposited $200. New balance: $1200
Bob withdrew $100. New balance: $400
Total bank balance: $0
Is it business hours? Yes
Account Holder: Alice, Balance: $1200
Account Holder: Bob, Balance: $400
结果分析:
- Alice 存入 $200,余额变为 $1200。
- Bob 取款 $100,余额变为 $400。
total_balance
类方法被调用,输出总银行余额为 $0。is_business_hours
静态方法被调用,输出是否为营业时间(在这个例子中,假设是)。- 打印出两个账户的信息,包括账户持有人和当前余额。