简介
类是一个抽象的概念,我们可以把它理解为具有相同属性和方法的一组对象的集合,而实例则是一个具体的对象。
一.定义类
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()
五.可访问对象
如果变量名或方法前面只有一个下划线 _,表示不要随意访问这个变量,虽然它可以直接被访问
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()
$ 红色
# 小狗
# 小狗
六.获取对象信息
获取类对象常用方法有以下四种:
- 使用 type(obj) 来获取对象的相应类型
- 使用 isinstance(obj, type) 判断对象是否为指定的 type 类型的实例
- 使用 hasattr/getattr/setattr
- 使用 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])
- 使用 getattr(obj, attr[, default]) 获取属性/方法的值
- 要是没有对应的属性则返回 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']