面向对象--基础

面向对象之封装

1、定义

class 类名:
    "类文档字符串"
    数据成员
    行为成员
class Wife:
    # 数据成员
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

    # 行为成员
    def play(self):
        print("{}玩耍".format(self.name))


wife = Wife('莉莉', 19, '女')
wife.play()

结果

2 、内存图

内存图
self是调用当前方法的对象地址

3、练习

class Student(object):
    def __init__(self, name, age):
        self.age = age
        self.name = name

    def showInfo(self):
        print("姓名: %s, 年龄:%d" % (self.name, self.age))


stuList = []
while True:
    name = input("输入姓名")
    if name == "":
        break
    age = int(input("输入年龄"))
    stu = Student(name, age)
    stuList.append(stu)

for item in stuList:
    item.showInfo()

结果
内存图

4、类成员

定义:在类中定义的变量
使用:通过类名.变量名的方式进行使用(不建议通过对象名访问类变量)


class ICBC:
    """
        工商银行
    """
    total_money = 1000000


    def __init__(self, name, money):
        self.name = name
        self.money = money
        #从总行中扣除支行的金额
        ICBC.total_money = ICBC.total_money - money


i01 = ICBC("上饶支行", 10000)
i02 = ICBC("景德镇支行", 10000)
print("总行还有%d" % (ICBC.total_money))

内存
类变量被所有对象共享

5、类方法

定义

@classmethod
def 方法名称(cls, 参数列表):
	方法体

调用:类名.方法名(参数列表)

作用:用于操作类变量
说明: 至少有一个形参,第一个形参用于绑定类
类方法只能访问变量,不能访问实例变量
实例方法可以通过类名访问类变量

class ICBC:
    """
        工商银行
    """
    total_money = 1000000

    def __init__(self, name, money):
        self.name = name
        self.money = money
        # 从总行中扣除支行的金额
        ICBC.total_money = ICBC.total_money - money

    @classmethod
    def fun(cls):
        print(cls.total_money)
        print("总行还有%d" % (ICBC.total_money))


i01 = ICBC("王者支行", 10000)
i02 = ICBC("荣耀支行", 10000)
ICBC.fun()


练习
"""
    练习:定义老婆类,创建3个老婆对象,统计个数。(对象计数器)
    可以通过类变量记录老婆对象个数
    可以通过类方法打印老婆对象个数
"""


class Wfie(object):
    wifeCount = 0

    def __init__(self, name, age):
        self.name = name
        self.age = age
        Wfie.wifeCount += 1

    @classmethod
    def showWfieNo(cls):
        print("wife 个数{}".format(cls.wifeCount))


wife = Wfie('zs', 10)
wife1 = Wfie('ls', 10)
Wfie.showWfieNo()

结果

6、静态方法

list01 = [
    ["00", "01", "02", "03"],
    ["10", "11", "12", "13"],
    ["20", "21", "22", "23"]
]


class Vector2:
    """
    二维向量
    可以表示位置/方向
    """

    def __init__(self, x, y):
        self.x = x
        self.y = y


    @staticmethod
    # 函数:表示左边方向
    def left():
        return Vector2(0, -1)

    @staticmethod
    def right():
        return Vector2(0, 1)

# 作用:位置 + 方向

pos01 = Vector2(1, 2)
# 通过类名调用静态方法
l01 = Vector2.left()
pos01.x += l01.x
pos01.y += l01.y

print(pos01.x, pos01.y)

语法
如果一个方法里​没有用到实例对象的任何属性​,可以把这个方法定义成为静态方法。
需要通过装饰器​​@staticmethod​​来进行修饰。
​静态方法既不需要传递类对象,也不需要传递实例对象(形参没有​​self/cls​​)​。
静态方法也能够通过​实例对象​和​类对象​去访问,即​​对象名.类方法名()​​​或​​类名.类方法名()​​

7、总结

实例方法:操作对象的数据
类方法:操作类的数据
静态方法:既不需要操作实例变量也不需要操作类变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值