![](https://img-blog.csdnimg.cn/direct/e25157d26f294769a83af703d32de995.png)
![](https://img-blog.csdnimg.cn/direct/3d5e0758ff9d4ec796f67462d3eada78.png)
包初始化 (__init__.py
)
# my_package/__init__.py
from .module1 import function1
from .module2 import function2
__all__ = ['function1', 'function2']
# 使用包
from my_package import function1, function2
function1()
function2()
类初始化 (__init__
方法)
class Person:
def __init__(self, name: str, age: int):
self.name = name
self.age = age
def greet(self):
return f"Hello, my name is {self.name} and I am {self.age} years old."
# 创建对象
john = Person("John", 30)
# 调用实例方法
print(john.greet()) # 输出: Hello, my name is John and I am 30 years old.
通过理解这两种 __init__
的不同用途,你可以更好地组织和初始化你的 Python 项目和类。
动态给对象添加方法
import types
class MyClass:
def __init__(self, value):
self.value = value
def new_method(self):
return f"This is a method for {self.value}"
# 创建一个 MyClass 的实例
obj = MyClass(10)
# 将函数 new_method 动态地添加为 obj 的方法
obj.new_method = types.MethodType(new_method, obj)
# 调用新添加的方法
print(obj.new_method()) # 输出:This is a method for 10
self
用于访问类的属性和方法,方法里面必须加上self,表示调用方法的当前对象(会隐式转递),如果不加self
是静态方法,需要使用@staticmethod
注解,同时就可以直接通过类名.方法名
访问。
__name__
: 在本模块中就是__main__
,其他模块中__name__
就是代表模块名,用于本模块中代码测试,导入到其他模块中不会运行。
python中的封装:以双下划线开头__
的方法和变量是私有的,类外需要通过公有的方法来访问。
继承
# 定义一个父类
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError("Subclass must implement abstract method")
# 定义一个继承自 Animal 的子类
class Dog(Animal):
def speak(self):
return f"{self.name} says Woof!"
# 定义一个继承自 Animal 的子类
class Cat(Animal):
def speak(self):
return f"{self.name} says Meow!"
类型注解:
- 基本数据类型注解
- 实例对象类型注解
- 容器类型注解
- 容器详细类型注解
- 函数/方法中类型注解