Python面向对象之类的成员

  Python面向对象的编程过程中,我们为类实例化了对象,并通过对象指针来访问类中对应的资源,那么这些资源大体分为三大部分,分别是字段、方法和属性,我们将这三大块统称为类的成员。

一、字段

  字段可以分为静态字段、动态字段,下面通过代码展示类中的两种字段

class MyClass:
    # 静态字段,属于类,多个对象共用一个静态字段
    leader = "abuve"
 
    def __init__(self):
        # 动态字段,属于对象,也可以叫普通的字段,每个对象都会有自己独有的动态字段
        self.name = "kevin"


  动态字段在类的实例化过程中很常见,通过self为每个对象封装属于自己特有的数据,但如果类中全部采用动态字段,也会遇到一些不合理的弊端,例如下面代码:

class Company:
    def __init__(self, dept, leader):
        self.company_name = "Center"
        self.dept = dept
        self.leader = leader  
          
    def ...
    
if __name__ == "__main__":    
    it_dept = Company("IT", "Abuve")
    hr_dept = Company("HR", "Kevin")


  我们通过动态字段方式为对象封装了自己独有的数据,但是这里发现公司名称company_name都为“Center”,不管创建哪个部门的对象,公司名称是不变的,我们知道动态字段存放在对象中,这样每个对象就都包含了一份company_name字段,这无疑增加了程序对内存的开销,因此更合理的方式应该使用静态字段,代码如下:

class Company:
    company_name = "Center"

    def __init__(self, dept, leader):
        self.dept = dept
        self.leader = leader    
        
    def ...
    
if __name__ == "__main__":
    it_dept = Company("IT", "Abuve")
    hr_dept = Company("HR", "Kevin")



同时在字段的调用方式上,我们也要遵循一些规则:
1、静态字段,属于类,通过类来调用访问
2、动态字段,属于对象,通过对象来调用访问

对于上述代码,我们通过下面的方式访问其中的字段数据:

print it_dept.deptprint 
hr_dept.leaderprint 
Company.company_name



如果通过对象访问静态字段同样可以访问到数据,因为对象也是通过对象指针指向了自己的类,对象中没有的数据最终也会去类中查找,但是这样的调用方式并不合理。

# 通过对象调用,同样访问到了类的静态字段

print it_dept.company_name
### Python 面向对象编程中的对象成员概念 在 Python 中,面向对象的核心在于类和对象的设计与使用。以下是关于对象成员(属性和方法)的具体说明: #### 1. 对象的属性 对象的属性是指存储在对象内部的数据变量。这些数据可以用来描述对象的状态或特征。 - **实例属性** 实例属性是在 `__init__` 构造函数中定义并绑定到特定的对象上的。它们属于具体的某个对象而不是整个类[^3]。例如,在下面的例子中,`name` 和 `breed` 是两个实例属性: ```python class Dog: def __init__(self, name, breed): self.name = name # 实例属性 self.breed = breed # 实例属性 ``` - **访问实例属性** 可以通过点号操作符 (`.`) 访问实例属性。例如: ```python my_dog = Dog("Buddy", "Golden Retriever") print(my_dog.name) # 输出: Buddy print(my_dog.breed) # 输出: Golden Retriever ``` #### 2. 对象的方法 对象的方法是定义在类内的函数,用于执行某些行为或计算基于对象状态的结果。 - **实例方法** 实例方法接收第一个隐式的参数 `self`,代表当前调用该方法的对象实例[^1]。例如: ```python class Dog: def __init__(self, name, breed): self.name = name self.breed = breed def bark(self): # 实例方法 return f"{self.name} says woof!" def get_breed(self): # 实例方法 return self.breed ``` - **调用实例方法** 调用实例方法时无需显式传递 `self` 参数,Python 自动处理这一点。例如: ```python my_dog = Dog("Max", "Poodle") print(my_dog.bark()) # 输出: Max says woof! print(my_dog.get_breed()) # 输出: Poodle ``` #### 3. 特殊方法 (魔术方法) 特殊方法也称为魔术方法,允许开发者自定义类的行为以便与其他内置功能兼容。例如,可以通过实现 `__len__()` 方法让自定义类支持 `len()` 函数[^2]。 ```python class MyList: def __init__(self, elements): self.elements = elements def __len__(self): # 定义长度逻辑 return len(self.elements) my_list = MyList([1, 2, 3]) print(len(my_list)) # 输出: 3 ``` --- ### 总结 Python对象成员主要包括属性和方法两部分。其中,属性分为实例属性;方法则包括普通实例方法以及一些特殊的魔术方法。合理利用这些特性可以帮助构建灵活且可扩展的程序结构。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值