1.在 Python 中,面向对象编程主要有两个主题,就是类和类实例
a.类和对象是相互关联的,类是实例的定义,实例是类的具像化。
b.类分为新式类和经典类
新式类:(注 base 是继承的父类,object 是所有类的父类)
class objectname(object):
define
经典类:
class objectname:
define
c. 实例化一个类,其实就是函数调用然后赋给一个变量,如果不赋值给一个变量,会被回收掉
objectvariable = objectname()
#coding:utf-8
"""Python 中的类 = 属性(数据)+方法类对象简称为类,实例对象简称实例"""
class Person():
age = 18
def study(self):
print "go to school"
def love(self):
print "marry"
p = Person()
print p.age
p.study()
p.love()
#coding:utf-8
"""经典类和新式类"""
class NewClass(object):#新式类 带object参数表示继承object
pass
class ClassicClass():#经典类 不带object参数表示不继承object
pass
p = NewClass()
NewClass.c = 100
p.a = 1
p.b = 2
print p.a
print p.b
print p.c
#coding:utf-8
"""一切都可以看作类类的三个特性 封装,继承,多态"""
list1 = [1,2,3]
list2 = list('hello')#list也是个类,传入参数给构造器
print list2
print issubclass(list,object)
print issubclass(dict,object)
#coding:utf-8
"""构造器"""
class Foo():
num = 5
def __init__(self,x,y):# self 只是一个标记,可以改成任意的字符
self.x = x
self.y = y
def print_xy(self):
print self.x,self.y
def print_num(self):
print self.num
print Foo.num
p = Foo(3,4)
p.print_xy()
p.print_num()
2.方法:改进一个类的手段就是添加功能也叫做方法,方法在类定义的时候定义然后只能被实例调用。所以调用一个类的方法的步骤是:
a.定义类以及方法
class foo(object):
"""define a class named foo"""
def print_x(self):
print "This is a class named foo"
note:***self ***代表实例对象本身,当实例调用方法的时候,是由解释器自动传入方法的
静态方法和类方法不需要self,类方法需要的是类而不是实例
b.实例化一个类
foo_one = foo() """就像函数一样去实例化,不使用new关键字"""
c.实例对象调用
foo_one.print_x()
3.创建一个类
a.关于__init__,init 可以看成是构造器(这样理解,并不是构造)它在实例化的时候自动调用,自动传入参数self以及其他(如果有)完成一些初始化的工作,就当成是一个特殊方法吧带有init的类
class foo(object):
def __init__(self,name,phone):
self.name = name
self.phone = phone
def updatephone(self,phone):
self.phone = phone
note:init 有三个参数,但是只要传入name,phone 这两个参数,self实例化的时候自动传入
4.创建实例
foo1 = foo('zhangsan',123456)
foo2 = foo('lisi',123456)
note:init 可以看成是实例化时类对其隐式调用,因为参数是完全一样的。如果存在默认参数可以不传入
5.访问实例属性
foo1.name
foo1.phone
foo2.name
foo2.phone
6.方法调用
foo1.updatephone('22222')"""updatephone需要两个参数,
一个self自动传入。另外可以通过访问.phone属性来验证该方法是否成功"""
7.创建子类
如创建一个foo的子类,
class sub_foo(foo): """需要将父类 foo写在括号中"""
def __init__(self,name,phone.email):"""如果重构了init,将不在执行父类中的init"""
foo.__init__(self,name,phone)"""这里的self是显示调用在实例化的时候传给父类"""
self.email = email
def updateemail(self,email):
self.email = email
note:子类继承父类的属性和方法,并且可以定制新方法而不会影响父类
8.使用子类
foo2 = sub_foo('lisi','123234','')