1,区别
类,类别,分门别类,人类,鸟类
对象,如int类下包含相似的不同个例,专业术语称为实例或对象
python中一切皆对象
2,类的创建
class Student:#类名有一个或多个单词组成,首字母大写,其他小写
pass
3,组成
类属性
实例方法
静态方法
类方法
class Student:
place='shanghai' #直接写在类中的变量称为类属性
def __init__(self,name,age):#初始化方法,赋值方法
self.name=name #self.name称为实体属性,是赋值操作,将局部变量name的值赋给实体属性
self.age=age
#实例方法
def eat(self):
print('eating')
#静态方法
@staticmethod
def method():
print('我使用了staticmethod修饰,我是静态方法')
#类方法
@classmethod
def cm(cls):
print('我使用了classmethod修饰,我是类方法')
#在类之外定义的称为函数,类之内的称为方法
def drink():
print('drinking')
#实例对象
s1=Student('Alice',12)
print(id(s1))
print(s1)
print('-----')
s1.eat() #对象名.方法名()
print(s1.name)
print('-----')
Student.eat(s1)#同s1.eat(),类名.方法名()
#类属性的调用
print(Student.place)
s2=Student('Tom',15)
print(s1.place)
print(s2.place)
Student.place='beijing' #重新赋值
print(s1.place)
print(s2.place)
Student.cm() #类方法的调用
Student.method() #静态方法的调用
class Student:
def __init__(self,name,age):
self.name=name
self.age=age
def eat(self):
print(self.name+'eating')
s1=Student('Alice',12)
s2=Student('Tom',12)
s1.gender='女' #为s1动态绑定性别属性,单独绑定
print(s1.name,s1.age,s1.gender)
print(s2.name,s2.age)
s1.eat()
s2.eat()
def show():
print('定义在类之外称为函数')
s1.show=show #动态绑定show方法,单独绑定
s1.show()
class Student:
def __init__(self,name,age):
self.name=name
self._age=age #不希望在外部被使用
def show(self):
print(self.name,self._age)
s1=Student('Alice',12)
s1.show()
#在外部使用
print(s1.name)
print(dir(s1))#查询可以访问
print(s1._Student__age) #靠程序员自觉
继承
class Person(object):
def __init__(self,name,age):
self.name=name
self.age=age
def info(self):
print('姓名:{0},年龄:{1}'.format(self.name,self.age))
class Student(Person):
def __init__(self,name,age,score):
super().__init__(name,age)
self.score=score
def info(self):
super().info()
print('学分:{0}'.format(self.score))
s1=Student('Alice',12,98)
s1.info()
python是动态语言,只需关心是否动态
class Animal(object):
def eat(self):
print('Animal can eat')
class Dog(Animal):
def eat(self):
print('dog eat meat')
class Cat(Animal):
def eat(self):
print('cat eat fish')
class Person:
def eat(self):
print('person eat different food')
def fun(obj):
obj.eat()
fun(Cat())
fun(Dog())
fun(Animal())
fun(Person())
class A():
pass
class B():
pass
class C(A,B):
def __init__(self,name,age):
self.name=name
self.age=age
x=C('Alice',20)
print(x.__dict__)#实例对象的实例字典
print(C.__dict__)#类对象返回类方法
print(x.__class__)#返回对象所属的方法
print(C.__bases__) #C类的父类元素
print(C.__mro__)#类的层次结构
print(C.__subclasses__())#子类列表
注意:
一个.py文件就是 一个模块(包含函数,类,语句)
多个模块组成程序,便于团队开发,模块复用
自定义模块
import math 导入所有
from math import pi 导入指定
from cale模块名 import add函数名
import cale
python程序—包---模块
包中包含__init__文件,目录中不包含
import 包名.模块名