1.定义一个类
面向对象最重要的概念就是类(Class)和实例(Instance)
class Preson(object):
pass
class后面紧接着是类名,类名通常是大写开头的单词.紧接着是(object),表示该类是从哪个类继承下来的,通常,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。
2.创建一个类的实力
2.1创建实例是通过类名+()实现的:
xiaoming= Preson()
由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的init方法,第一个参数永远是实例变量self,表示创建的类实例本身.在创建实例的时候.就可以将属性绑定上去.
class Preson(object):
def __init__(self, name, age):
self.name = name
self.age= age
和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,表示创建的类实例本身.并且,调用时,不用传递该参数。除此之外,类的方法和普通函数没有什么区别,所以,你仍然可以用默认参数、可变参数、关键字参数和命名关键字参数。
2.2.实例的访问限制.
在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。
但是,从前面Preson类的定义来看,外部代码还是可以自由地修改一个实例的name、age属性:
>>> bart = age('Bart Simpson', 59)
>>> bart.age
59
>>> bart.age= 99
>>> bart.age
99
如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线,在Python中,实例的变量名如果以开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问,所以,我们把Student类
class Preson(object):
def __init__(self, name, age):
self.__name = name
self.__age = age
def print_score(self):
print('%s: %s' % (self.__name, self.__age))
但是如果外部代码要获取name和score怎么办?可以给Student类增加get_name和get_score这样的方法:
class Student(object):
...
def get_name(self):
return self.__name
def get_age(self):
return self.__name
3.继承和多态.
在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。
父类:
class Animal(object):
def run(self):
print('Animal is running...')
子类:
dog = Dog()
dog.run()
cat = Cat()
cat.run()
判断一个变量是否是某个类型可以用isinstance()判断:
>>> isinstance(a, list)
True
>>> isinstance(b, Animal)
True
>>> isinstance(c, Dog)
True
网友评论