Python--面向对象 类与对象

目录

一、面向对象编程

二、面向过程,面向对象的比较

三、类,对象

1.概念

(1)类

(2)对象

2.创建

(1)创建类:大驼峰命名法

(2)创建对象

3.self变量

5.__init__()    初始化方法

6.__str__方法

四、类属性和实例属性

1.类属性是不可变数据类型(静态属性)

2.类属性是可变数据类型




一、面向对象编程

Object Oriented Programming    (OOP)

二、面向过程,面向对象的比较

 生活中程序中  
面向过程

亲力亲为(自己干)

自己做饭吃

函数之间的相互调用

函数为基本结构使用

函数变量
面向对象

坐享其成(让别人去干,享受成果)

点外卖吃

对象为基本结构方法属性

三、类,对象

1.概念

 概念 能不能直接使用
是一群具有相同特征或者行为的事物的统称抽象不能直接实用
描述一个类: 行为,特征
对象是由类创造出来的具体的实体具体不能直接使用

(1)类

类是一群具有相同特征或者行为的事物的统称,是抽象的,不能直接使用

描述一个类:行为,特征

类:可以理解为一种事物的模板

(2)对象

是由类创造出来的具体的实体,可以直接使用

2.创建

(1)创建类:大驼峰命名法

格式:

class 类名:

    类的属性

    类的方法

    ....

# 创建类:大驼峰命名法
class Dog:
    def eat(self):
        print('吃骨头...')

    def sleep(self):
        print('睡觉了...')

(2)创建对象

格式:

对象名=类名()

# 创建对象
# 格式:对象名称=类名()
# 一条狗
dog = Dog()
# 调用
dog.sleep()
dog.eat()
print(id(dog))
# 又一条狗
dog1 = dog
print(id(dog))
print(id(dog1))

3.self变量

哪个对象在调用方法或属性,self就是哪个对象

4.在类的外部添加属性

可以这样用,但是不推荐使用

格式:

对象名.属性名=值

5.__init__()    初始化方法

我们可以在此方法中,做一些初始化的操作

创建对象的时候就会自动调用__init__()

class Cat:
    def __init__(self, name):
        print('init方法在创建对象的时候执行')
        self.name = name

    def eat(self):
        print('猫吃老鼠')
        print(self.name)


# 创建对象的时候自动调用__init__(),
bule_cat = Cat('蓝猫')
bule_cat.eat()
black_cat = Cat('黑猫')
black_cat.eat()


# 类的方法里面传的是形参,创建对象传的是实参

6.__str__方法

在没有写__str__()方法的时候,打印对象,会输出对象的地址

class Cat:
    def __init__(self, name, age):
        print('init方法在创建对象的时候执行')
        self.name = name
        self.age = age

    def eat(self):
        print('猫吃老鼠')
        print(self.name)

    # def __str__(self):
    #     msg = 'name的属性值是{},age的属性值是{}'.format(self.name, self.age)
    #     return msg


cat = Cat('蓝猫', 10)
print(cat)  # <__main__.Cat object at 0x0000000001E8D358>

在写了__str__()方法的时候,打印对象,就会输出__str__()里面的内容

class Cat:
    def __init__(self, name, age):
        print('init方法在创建对象的时候执行')
        self.name = name
        self.age = age

    def eat(self):
        print('猫吃老鼠')
        print(self.name)

    def __str__(self):
        msg = 'name的属性值是{},age的属性值是{}'.format(self.name, self.age)
        return msg


cat = Cat('蓝猫', 10)
print(cat)  
# name的属性值是蓝猫, age的属性值是10

四、类属性和实例属性

数据类型 操作类属性和实例属性的变化情况
不可变数据类型int   float   str  tuple.....类属性变化都变
实例属性发生变化只有该实例属性变化,其他的都不变
可变数据类型list   dict    set.....实例属性调用自己的方法全都变
实例属性重新赋值

只有实例属性变

重新开辟了一块内存空间

1.类属性是不可变数据类型(静态属性)

2.类属性是可变数据类型


 

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

    def __str__(self):
        msg = '{}的年龄是{}'.format(self.name, self.age)
        return msg


person = Person('zs', 10)
person.age = -10
print(person)
# zs的年龄是-10
class Person:
    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    def __str__(self):
        msg = '{}的年龄是{}'.format(self.__name, self.__age)
        return msg


person = Person('zs', 20)
person.__name = '张三'  # 在类的外面不能修改name的值
print(person)  # zs的年龄是20
class Person:
    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    def set_age(self, age):
        if age < 0 or age > 150:
            print('输入的年龄不合法...')
            return
        self.__age = age

    def get_age(self):
        return self.__age

    def __str__(self):
        msg = '{}的年龄是{}'.format(self.__name, self.__age)
        return msg


person = Person('zs', 20)
person.set_age(-10)  # 输入的年龄不合法...
ret = person.get_age()
print(ret)  # 20
print(person)  # zs的年龄是20
# 方法私有化之后,类外面的不能调用,但是类里面可以调用
class CallPhone:
    def __tell(self):
        print('正在通话中...')

    def tell_one(self, money):
        if money > 0:
            self.__tell()  # 在类内部,调用私有化后的方法
        else:
            print('欠费了啊...')
            return


c1 = CallPhone()
c1.tell_one(-1)  # 欠费了啊...
c1.tell_one(10)  # 正在通话中...

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值