类是一种广义的数据类型,这种数据类型中的元素既包含数据,也包含操作数据的函数。而对象是具有这种数据类型的变量。类是抽象的,不占用内存空间,而对象是具体的,占用存储空间。定义对象后系统为对象变量分配内存空间。
用我的话来讲,你看那个每次编程的开头from。举个栗子,就像我们开头使用的import os。os就是一个类。delay = os.popen("ping -n 1 -w 4000 1.197.204.132" )。os. popen就是一个类的函数(方法),delay就是一个实例化的对象。
类的定义
在Python中,通过class关键字来定义类
class 类名:
类体
类头由关键字class开头,后面跟类名。
类体定义类的内容。一是类的属性;二是类的方法。
当一个类定义完之后,产生一个类对象。类对象支持两种操作:引用和实例化。引用操作是通过类对象去调用类中的属性和或方法,而实例化是产生一个类对象的实例,称作实例对象。
1._init_(self,..)是类初始化构造方法
下面这个例子中的def __init__(self,name,score)用参数name和score进行初始化。self作为第一个参数表示对象自身
2.类方法@classmethod,通过实例对象与类对象访问。实例方法则是类中最常用最定义的成员方法。静态方法@staticmethod,不需要定义参数
3.私有属性
类与对象具体例子
# -*- coding: utf-8 -*-
"""Created on Sun Jul 28 19:24:41 2019@author: Administrator"""
class Student:
#定义类的属性
name='koro'
__age=18 #age是私有属性,不能再类外通过对象访问私有属性
gender='female'
#定义类的方法(函数)
def __init__(self,name,score): #__init__定义了是实例属性,__init__构造函数时,具有初始化作用,当该类被实例化是就执行函数。
self.name=name
self.score=score
def print_score(self): #实例方法,一般以self作为第一个参数
print('{}:{}'.format(self.name,self.score))
@classmethod #类方法的开头
def getName(cls): #类方法第一个参数一般是cls(类对象)
return cls.name
@staticmethod #静态方法不需要额外参数
def getGender():
return Student.gender
#对象名.属性名 对象名.函数名()
#这些是实例对象
brenden=Student('Brenden:',59) #创建实例化对象 对象名=类名(参数
brenden.print_score() #实例对象的方法
print(brenden.name) #对象的属性
lucy=Student('Lucy',87)
lucy.print_score()
print(brenden.getName())#通过实例对象引用
print(Student.getName())#通过类对象引用
print(Student.getGender())
print(Student.name,'\n') #Student是类对象
以下是这个程序的结果
Brenden: : 59
Brenden:
Lucy : 87
koro
koro
female
koro
类的继承与多态
1.继承指一个新类从已有的类那里获得其已有的特性。
类继承分为单继承与多重继承。
单继承的定义形式入下:class 子类名(父类名):
多重继承一般定义形式:class 子类名(父类1,父类2......):,此方法有一定的规则
例如(单继承)
# -*- coding: utf-8 -*-
"""Created on Sun Jul 28 23:01:53 2019@author: Administrator"""
#子类继承父类的所有公有属性和方法,可以在子类中通过父类名来调用,不继承私有
#在python中,如果父类和子类都重新定义了构造方法__init__,在进行子类实例化的时候,子类的
#构造方法不会自动调用父类的构造方法,必须在子类中显示调用。父类名.方法
class UM:
def __init__(self,name,age):
self.name=name
self.age=age
print('Init UM:',self.name)
def tell(self):
print('Name:{};age:{}'.format(self.name,self.age))
class St(UM):
def __init__(self,name,age,marks):
UM.__init__(self,name,age) #显示调用父类构造方法
self.marks=marks
print('Init Student:',self.name)
def tell(self):
UM.tell(self)
print('Marks:',self.marks)
class Te(UM):
def __init__(self,name,age,salary):
UM.__init__(self,name,age)
self.salary=salary
print('Init Teacher:',self.name)
def tell(self):
UM.tell(self)
print('Salary:',self.salary)
class God(UM):
#def __init__(self,name,age):
#UM.__init__(self,name,age)
#def announce(self):
# print('I')
pass
B=St('Bruce',18,80)
L=Te('Lucy',30,10000)
C=God('Jesus','???')
members=[B,L]
for member in members:
member.tell()
以下是结果
Init UM: Bruce
Init Student: Bruce
Init UM: Lucy
Init Teacher: Lucy
Init UM: Jesus
Name:Bruce;age:18
Marks: 80
Name:Lucy;age:30
Salary: 10000
多重继承的特殊例子,大家可以自己分析
#这里采用的是深度搜索规则,从左到右深度优先
class A():
def foo1(self):
print("A")
class B(A):
def foo2(self):
print('B')
class C(A):
def foo1(self):
print('C')
class D(B,C):
pass
d=D()
d.foo1()
2.多态即多种形态,是指不同的对象收到同一种消息时会产生不同的行为。例如内置函数len(),len函数不仅可以计算字符串的长度没还可以计算列表、元组等对象中的数据个数。这正是一种多态的表现。
总结:还是要多分析程序呀。Python编程内容之广泛....多多加油与实践,不忘初心,方得始终。