类:具有相同属性和方法的对象的集合
语法:
class 类名:
属性
方法
对象的三要素:属性(对象是什么)、方法(对象能做什么)、事件(对象如何响应)
相互关系:类是对象的抽象,对象是类的实例,类是一种抽象事物的分类,对象是一种实例;
一、属性
概念:用于访问类字段的成员;
属性用途:保证数据的安全,作数据的验证;
属性分:实例属性和类属性
1.实例属性
在init(self,..)中初始化,内部调用时需要加self。外部调用时用对象.属性名调用。
2.类属性
在init()外初始化,在内部用类名.类属性名调用。
外部既可以用类名.类属性名又可以用实例化对象.类属性名来调用
3.类的私密属性
1):单下划线_开头:只是告诉别人这是私有属性,外部依然可以访问更改
2):双下划线__开头:外部不可通过实例化对象.属性名来访问或者更改,一旦属性被私有化,即使继承它的字类也不能访问到。
class women():
def __init__(self,name):
self.__name = name
self.__age = 21
def secret(self): ##在类的内部创建方法调用私有属性
a = self.__age
print a
def __str__(self):
return self.__namewomen('Lily')
a = women('Lily') ##在类的外部不能直接调用私有属性
a.secret()
二、方法
1.类的静态方法
静态方法,实际上就是一个方法,位于类定义的命名空间中,不会对任何实例类型进行操作,用python的函数staticmethod来把类中的函数定义成静态方法
class Human(object):
count = 0
@staticmethod
def call(): ##staticmethod
print "Human is the Evil"
def __init__(self,name):
self.name = name
Human.count += 1
h1 = Human('p1')
h2 = Human('p2')
Human.call()
2.类方法
类方法是给类用的,类在使用时会将类本身当做参数传给类方法的第一个参数,python为我们内置了函数classmethod来把类中的函数定义成类方法
类方法,表示方法绑定到类。
calssmethod和staticmethod不需要实例化名就可以直接调用。
class Human(object):
count = 0
@classmethod
def show_count(cls):
print "The number:%s" % cls.count
def __init__(self,name):
self.name = name
Human.count += 1
h1 = Human('p1')
h2 = Human('p2')
Human.show_count()
3.类的内置方法
__dict__
: 类的属性(包含一个字典,由类的数据属性组成)
__doc__
:类的文档字符串
__name__
: 类名
__module__
: 类定义所在的模块(类的全名是__main__.classNam
‘,如果类位于一个导入模块mymod中,那么className.__module__
等于 mymod)
__bases__
: 类的所有父类构成元素(包含了一个由所有父类组成的元组)
(1) __new__(cls,*agrs,**kwargs)
在类调用init方法时,new方法决定是否要用init方法,因为new可以调用其他类的方法,或者返回别的对象来作为本类的实例;
new()方法的特性:
new()方法时在类准备将自身实例化时调用;
new()方法始终都是类的静态方法,即使没有被加上静态方法装饰器;
__new__()
##内存空间相同
class MusicPlayer(object):
instance = None
def __new__(cls, *args, **kwargs):