python note 22 面向对象成员

本文深入讲解了Python面向对象编程的核心概念,包括变量、方法、属性和嵌套的使用技巧及场景。探讨了实例变量与类变量的区别,实例方法、静态方法和类方法的应用,以及属性装饰器的实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、变量

变量:
    - 实例变量(字段) 
        - 公有实例变量(字段) 
        - 私有实例变量(字段) 
    - 类变量(静态字段)
        - 公有类变量(静态字段)
        - 私有类变量(静态字段)

实例一:

class Foo:
    # 类变量(静态字段)
    country = "中国"

    def __init__(self, name):
        # 实例变量(字段)
        self.name = name

    def func(self):
        pass


obj1 = Foo('季红')
obj2 = Foo('王晓东')

Foo.country

 

2、方法

实例方法
class Foo(object):
    def __init__(self, name):
        self.name = name

    # 实例方法
    def func(self):
        print(self.name)

obj = Foo('..')
obj.func()

- 静态方法
class Foo(object):
    def __init__(self, name):
        self.name = name

    # 静态方法,如果方法无需使用对象中封装的值,那么就可以使用静态方法
    @staticmethod
    def display(a1, a2):
        return a1 + a2

Foo.display(1, 3)

- 类方法
class Foo(object):
    # 类方法,cls是类
    @classmethod
    def show(cls, x1, x2):
        print(cls, x1, x2)

# 执行类方法
Foo.show(1, 8)

总结

# ############### 静态方法 ##############
#   1. 编写时:
#        - 方法上方写 @staticmethod
#        - 方法参数可有可无
#   2. 调用时:
#       - 类.方法名()  *
#       - 对象.方法名()
#   3. 什么时写静态方法?
#       - 无需调用对象中已封装的值.

# ############### 类方法 ##############
#   1. 定义时:
#        - 方法上方写: @classmethod
#        - 方法的参数: 至少有一个cls参数
#   2. 执行时:
#        - 类名.方法名()  # 默认会将当前类传到参数中.
#   3. 什么时用?
#        - 如果在方法中会使用到当前类,那么就可以使用类方法.

3、属性

 总结:
1. 编写时
 - 方法上方写 @property
 - 方法参数:只有一个self
2. 调用时:无需加括号  对象.方法
3. 应用场景: 对于简单的方法,当无需传参且有返回值时,可以使用 @property

4、嵌套

面向对象:
"""
创建三个学校且三个学校的设施内容等都是一致.
"""
class School(object):
    def __init__(self, name, address):
        self.name = name
        self.address = address

    def speech(self):
        print('讲课')

obj1 = School('老男孩北京校区', '美丽富饶的沙河')
obj2 = School('老男孩上海校区', '浦东新区')
obj3 = School('老男孩深圳校区', '南山区')


class Teacher(object):
    def __init__(self, name, age, salary):
        self.name = name
        self.age = age
        self.__salary = salary
        self.school = None

t1 = Teacher('李杰', 19, 188888)
t2 = Teacher('艳涛', 18, 60)
t3 = Teacher('女神', 16, 900000)
# ############## 老师分配校区
t1.school = obj1
t2.school = obj1
t3.school = obj2
# ####################################
# 查看t1老师,所在的校区名称/地址
print(t1.school.name)
print(t1.school.address)
print(t1.name)
print(t1.age)
t1.school.speech()

准则: 字段和方法的归类.

以前:
[
    {"name": 'alex1', 'age': 18, xxx: 999},
    {"name": 'alex2', age':18},
]

 

转载于:https://www.cnblogs.com/P-Z-W/p/11010506.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值