#类 一类东西,一个模型
#实例 #通过这个模型造出来的东西
#对象 #实例
#实例化 #就是造实例的过程
class Cat(object): #新式类书写方式 def __init__(self,name): #__init__ 构造函数,类里面可以有,也可以没有,构造函数时实例化的时候就会执行的函数 self.name = name def cry(self): print('%s在哭泣'%self.name) xiaohei = Cat('Jaryy') #实例化一个对象 xiaohei.cry() #实例化后调用类里面的方法(函数),类里面的方法调用才会运行,不调用不会运行
#面向的对象的特性
#封装
#就是把零散代码封装成一个函数,或者封装成一个类
#继承
#就是父类有的东西,你也有。
class JxFather(object): addr = '密云' def __init__(self,num): self.house_num = num def makeMoney(self): print('xx') print('sdfjksdjfklsdjfsdfsdf23423sdfs,秘密6') class Jx(JxFather):#继承了JxFather这个类 def __init__(self): self.name = 'wjx' print('jx') def dabaojian(self): print('拔出大宝剑') class JxSon(Jx): print('jjjj') wdb = JxSon()#父类和父类的父类中的东西,wdb这个实例中全都有 wdb.makeMoney()
#方法 就是类里面有什么功能,其实就是类里面的函数
#构造函数
初始化这个对象,你想让他给你传哪些东西
他会在这个类实例化的时候自动执行。
#析构函数
它是在这个实例被销毁的时候自动执行的。
#类里面的函数如果有多次调用,而且还要获取到他的返回值,那就用return
如果这个变量就用了一次,那么就用self
#类变量,类属性,是一个意思
存在类里面的,一般一些公共的东西,不会变的,用类变量
class My(object): country = 'Janpan' #类变量 __salt = '&2342bkjh234234' def __init__(self): self.__cup = '乐扣' #私有变量,变量前面加上两个下划线,类外部不可以调用,只能在类内部使用 print('cup is %s'%self.__cup) # self.__my_money() def bad(self): # print('【%s】坏掉了'%self.__cup) # self.__cup = '款泉水瓶' print('又换了个杯子是%s'%self.__cup)
#实例变量
实例化的时候才创建的变量。
class My(object): addr='changping' def __init__(self,name): self.name=name def cup(self): self.bz='cupper' gl=My('gaili') gl.cup() print(gl.bz)# bz 这个变量,只有对象实例化后且调用gl.cup()后才存在,如果不调用gl.cup()这个函数,bz这个变量就是不存在的
#类方法
通过类名可以直接调用,不需要实例化,可以访问类属性,不可以访问实例属性
class My(object): country = 'Janpan' @classmethod def ddl(cls):#类方法,通过类名可以直接调用 print(cls.country) My.ddl()#不需要实例化,类名可以直接调用
#静态方法
就是写在类里面的一个普通函数而已。
class Person: grade = 1 def sayHi(self): # 加self区别于普通函数 print("Hello, your name is?") @staticmethod # 声明静态,去掉则编译报错;还有静态方法不能访问类变量和实例变量 def sayName(): # 使用了静态方法,则不能再使用self print("my name is king")
Person.sayName() #可以通过类名直接调用 # 运行结果:my name is king
#实例方法
必须实例化之后才可以调用的方法
类里面的函数,如果第一个参数是self,那么就是一个实例方法
#属性方法
把一个方法变成一个变量
属性方法也是一个实例方法,需要实例化才能使用。
属性方法同样可以通过实例方法实现
如果你使用属性方法的话,那么必须得有返回值,而且不能有入参。
class Calc(object): def __init__(self,a,b): self.a = a self.b = b def add(self): return self.a+self.b @property #通过这个关键字变成一个类属性 def add2(self): return self.a+self.b
c=Calc(1,2)
print(c.add2)#实例化后直接调用,后面不用加()
运行结果:3
#私有
私有属性、变量
私有方法、函数
方法或者变量,在前面加上__,(两个下划线),它就是一个私有方法/私有变量
私有方法或者变量在类里面随便用,出了类就不好使,类外部调用私有变量或者方法,就会报错,
“my.__my_money()
AttributeError: 'My' object has no attribute '__my_money'”