Python-面向对象编程

#类         一类东西,一个模型
#实例 #通过这个模型造出来的东西
#对象 #实例
#实例化 #就是造实例的过程

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'”



原文地址:https://www.cnblogs.com/niuniu2018/p/8342307.html