类是一个抽象的概念,我们可以把它理解为具有相同属性和方法的一组对象的集合,而实例则是一个具体的对象。
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.以在属性或方法的名称前面加上两个下划线,即可代表私有,外部将无法调用
如:__name代表类的私有属性,在调用私有属性时就会报错,提示类没有这属性
class Animal:
def __init__(self, name, color):
self.__name = name
self.color = color
# 创建一个实例对象
animal = Animal("小狗", "红色")
print(animal.color)
print(animal.__name)
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()
$ 红色
# 小狗
# 小狗
获取类对象常用方法有以下四种:
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 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
使用 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
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"))
使用 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)
# 两岁
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']