11、python-类和实例

简介

类是一个抽象的概念,我们可以把它理解为具有相同属性和方法的一组对象的集合,而实例则是一个具体的对象。

一.定义类

1.Animal 是类名,通常类名的首字母采用大写(如果有多个单词,则每个单词的首字母大写)
2.后面紧跟着 (object),表示该类是从哪个类继承而来的,不写默认是继承自 object 类

# class Animal:
class Animal(object):
    pass

二.实例化

# class Animal:
class Animal(object):
    pass


# 创建一个实例对象
animal = Animal()
print(animal)

# <__main__.Animal object at 0x0000012DC4E07520>

三.类初始化方法

1.init 理解为对象的初始化方法,它的第一个参数永远是 self,指向创建的实例本身。
2.定义了 init 方法,我们在创建实例的时候,就需要传入与 init 方法匹配的参数

class Animal:

    def __init__(self, name):
        self.name = name

    def animal_name(self):
        """定义一个获取名字的方法"""
        print(self.name)


# 创建一个实例对象
animal = Animal("小狗")
name = animal.animal_name()
print(name)

# 小狗

四.私有对象

1.在某些情况下,我们希望限制用户访问对象的属性或方法,也就是希望它是私有的,对外隐蔽

2.以在属性或方法的名称前面加上两个下划线,即可代表私有,外部将无法调用

1.私有属性

如:__name代表类的私有属性,在调用私有属性时就会报错,提示类没有这属性

class Animal:

    def __init__(self, name, color):
        self.__name = name
        self.color = color


# 创建一个实例对象
animal = Animal("小狗", "红色")
print(animal.color)
print(animal.__name)

在这里插入图片描述

2.私有方法

class Animal:

    def __init__(self, name, color):
        self.__name = name
        self.color = color

    def __animal_name(self):
        """定义一个私有方法"""
        print(self.__name)

    def animal_color(self):
        print(self.color)


# 创建一个实例对象
animal = Animal("小狗", "红色")
animal.animal_color()
animal.__animal_name()

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=http%3A%2F%%3A82%2Fstatic%2Fimg%2Fe6992f0557655f087e278c06ce4e2955.image.png&pos_id=img-QiO3VT2E-1703825014771

五.可访问对象

如果变量名或方法前面只有一个下划线 _,表示不要随意访问这个变量,虽然它可以直接被访问

class Animal:

    def __init__(self, name, color):
        self._name = name
        self.color = color

    def _animal_name(self):
        print(self._name)


# 创建一个实例对象
animal = Animal("小狗", "红色")
print(animal.color)
print(animal._name)
animal._animal_name()

$ 红色
# 小狗
# 小狗

六.获取对象信息

获取类对象常用方法有以下四种:

  1. 使用 type(obj) 来获取对象的相应类型
  2. 使用 isinstance(obj, type) 判断对象是否为指定的 type 类型的实例
  3. 使用 hasattr/getattr/setattr
  4. 使用 dir(obj) 可以获取相应对象的所有属性和方法名的列表## 1.type(obj)
class Animal:

    def __init__(self, name, color):
        self._name = name
        self.color = color

    def _animal_name(self):
        print(self._name)


# 创建一个实例对象
animal = Animal("小狗", "红色")
print(type(animal))

# <class '__main__.Animal'>

2.isinstance(obj, type)

class Animal:

    def __init__(self, name, color):
        self._name = name
        self.color = color

    def _animal_name(self):
        print(self._name)


# 创建一个实例对象
animal = Animal("小狗", "红色")
print(isinstance(animal, Animal))

# True

3.hasattr/getattr/setattr

3.1 hasattr(obj, attr)

使用 hasattr(obj, attr) 判断对象是否具有指定属性/方法

class Animal:

    def __init__(self, name, color):
        self._name = name
        self.color = color

    def animal_name(self):
        print(self._name)


# 创建一个实例对象
animal = Animal("小狗", "红色")
print(hasattr(animal, "color"))
print(hasattr(animal, "animal_name"))
print(hasattr(animal, "123"))

# True
# True
# False

3.2 getattr(obj, attr[, default])

  1. 使用 getattr(obj, attr[, default]) 获取属性/方法的值
  2. 要是没有对应的属性则返回 default 值(前提是设置了 default),否则会抛出 AttributeError 异常;
class Animal:

    def __init__(self, name, color):
        self._name = name
        self.color = color

    def animal_name(self):
        print(self._name)


# 创建一个实例对象
animal = Animal("小狗", "红色")
print(getattr(animal, "color"))
print(getattr(animal, "animal_name"))
# animal里没有456,设置一个默认的返回值,不会报错
print(getattr(animal, "456", "类animal里没有456这个对象"))
# animal里没有123,不设置一个默认的返回值,会报错
print(getattr(animal, "123"))

在这里插入图片描述

3.3 setattr(obj, attr, value)

使用 setattr(obj, attr, value) 设定该属性/方法的值,类似于 obj.attr=value;

class Animal:

    def __init__(self, name, color):
        self._name = name
        self.color = color

    def animal_name(self):
        print(self._name)


# 创建一个实例对象
animal = Animal("小狗", "红色")
setattr(animal, 'age', "两岁")
print(animal.age)

# 两岁

4 dir

class Animal:

    def __init__(self, name, color):
        self._name = name
        self.color = color

    def animal_name(self):
        print(self._name)


# 创建一个实例对象
animal = Animal("小狗", "红色")
print(dir(animal))

# ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', 
# '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', 
# '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', 
# '__subclasshook__', '__weakref__', '_name', 'animal_name', 'color'] 
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

御剑天涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值