面向对象

                                                                        面向对象

一、面向对象介绍

对象: 一个程序的基本单元, 一个对象包含了数据和操作数据的方法

1.1 基础概念

  1. 类(class):对具有相同数据或者方法的一组对象的集合
  2. 对象(obj):对象是一个类的具体事例
  3. 实例化:由类生成一个对象. 实例具有类的所用属性和方法.
  4. 类属性:属于一个类中所有对象的属性
  5. 实例属性:一个对象就是一组属性的集合
  6. 类方法:那些无须特定的对性实例就能够工作的从属于类的函数
  7. 实例(对象)方法:所有存取或者更新对象某个实例一条或者多条属性函数的集合

1.2 认识类

在python中一切皆对象, 类型的本质就是类.
python使用关键字class定义类. 类名的命名采用大驼峰命名法
语法如下:

class ClassName:
      class_attr = value  # 类属性
      def object_method_name(self, args, key=value, *args, **kwargs):  # 实例方法
            pass

二、属性

2.1 类属性

  1. 查询类属性ClassName.class_attr
class Person:
    sex = "male"
    name = "dyp"


print(Person.name, Person.sex)  # 输出 dyp male
  1. 修改类属性ClassName.class_attr = value
class Person:
    sex = "male"
    name = "dyp"


print(Person.name)  # 输出 dyp

Person.name = "Jone"

print(Person.name)  # 输出Jone
  1. 增加类属性ClassName.class_attr = value
class Person:
    sex = "male"
    name = "dyp"


print(dir(Person))
Person.age = 21
print(dir(Person))
  1. 删除属性del ClassName.class_attr
class Person:
    sex = "male"
    name = "dyp"


del Person.name

print(Person.name)  # 报错, 没有name属性

2.2 实例属性

实例 = 类名(): 实例化, 复制类的所用属性和方法. 一个类可以生成多个实例, 每个实例有单独的内存空间.

  1. 实例属性查看实例.obj_attr
class Person:
    sex = "male"
    name = "dyp"


person = Person()  # 实例化Person
print(person.name, person.sex)  # 查看实例的属性
  1. 修改实例属性实例.obj_attr = value
class Person:
    sex = "male"
    name = "dyp"


person = Person()  # 实例化Person

print(id(Person.name), id(person.name))  # 实例的属性未发生变化时, 引用 类的属性
person.name = "Jone"  # 修改属性, 在实例的命名空间中新建一个对象, 赋值给实例属性名
print(id(Person.name), id(person.name))  # 实例属性发生变化后, 新建一个
  1. 增加实例属性实例.obj_attr = value
class Person:
    sex = "male"
    name = "dyp"


person = Person()  # 实例化Person

person.age = 20
print(person.age)
  1. 删除实例属性del 实例.obj_attr
class Person:
    sex = "male"
    name = "dyp"


person = Person()  # 实例化Person
person.age  = 20
del person.age

三、方法

3.1 实例方法

class Cat:

    def __init__(self, name):  # 类的初始话方法, 当类实例化时, 触发此方法. 用于设置实例的特征属性
        self.name = name

    def eat(self):  # 实例方法, 通过类生成的实例调用. 通过类调用时会报错
        print(f"小猫{self.name}, 吃东西了")


cat = Cat("花花")

cat.eat()  # 调用方法

四、受保护的属性和方法

只有当前类和当前类生成的实例可以访问, 继承此类的其他类和其生成的实例不能访问.
属性名或方法名前面有一个下划线(_)成为受保护的属性或方法

class Person:

    def __init__(self, name, birthday):
        self.name = name
        self._birthday = birthday  # 受保护的属性, 属性名前面有一个下划线 _

    def _age(self):
        self.age = 24


person = Person("Jone", "1996-12-22")
print(person._birthday)  # 查看受保护的属性
person._birthday = "1996-12-11"  # 修改受保护的属性
person._age()  # 调用受保护的方法
print(person.age)

五、私有属性和方法

只有类的内部才能访问属性和方法, 用于隐藏隐私信息
属性名或方法名前面有两个下划线(__)成为私有的属性或方法
可以通过_ClassName__attr访问私有属性, _ClassName_method()调用受保护方法

class Cat:
    __name = "花花"

    def __test(self):
        print(f"{self.__name}")  # 在类的内部才能访问

    def test(self):
        self.__test()

cat = Cat()

# print(cat.__name)  # 不能被访问

# print(Cat.__name)  # 类外部, 类名也是不能访问是由属性或方法的

print(cat._Cat__name)  # 私有的属性会被python重命名为 _ClassName__attrName
print(Cat._Cat__name)  # 私有的属性会被python重命名为 _ClassName__attrName
cat._Cat__test()       # 私有的方法会被python重命名为 _ClassName__methodName
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值