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)

11、python-类和实例_第1张图片

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()

11、python-类和实例_第2张图片

五.可访问对象

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

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))

# 

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"))

11、python-类和实例_第3张图片

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'] 

你可能感兴趣的:(python基础,python,开发语言,类,clas,实例)