python中的面向对象

学完之后自己来看这个图(也可以自己画)

1.定义一个类(一个类包括了属性和方法,下面的代码给出了具体的代名词)(记住方法里面的参数只要是self就跟实例挂钩)

class Student:
    #类属性
    native_place="重庆"
    
    #类方法
    #1.初始化方法
    def __init__(self,name,age):
        self.name=name       #self.name称之为实体属性,进行了一个赋值操作,将局部变量的name的值赋值给实体属性
        self.age=age

    #2.实例方法
    def play(self):
        pass

    #3.静态方法
    #  静态方法中不能写self
    @staticmethod
    def sm():
        pass

    #4.类方法
    #  类方法写cls
    @classmethod
    def cm(cls):
         print("我是类方法,我被类调用啦")




2.创建一个对象

说明了直接打印对象返回的是这个对象在内存空间的位置

 Student就是类对象  stu1就是实例对象

#创建对象
#传参是根据__init__初始化方法中的实体参数来传参的
stu_z3=Student("张三", 20)

#使用实例方法的两种方法
#方法一:对象直接调用
stu_z3.study()
#方法二:类调用指定对象
Student.study(stu_z3)

3.类属性,类方法,静态方法(以及对应的使用方式)

注:类方法和静态方法都可以被类和类实例调用,类实例方法仅可以被类实例调用。

    1.类属性的使用

#类的属性的使用
print(Student.native_place)
stu_z3=Student("张三",18)
print(stu_z3.native_place)

stu_l4=Student("李四",19)
print(stu_l4.native_place)

     2.类属性修改

#类属性的修改
Student.native_place="徐州"
print(Student.native_place)
stu_z3=Student("张三",18)
print(stu_z3.native_place)

stu_l4=Student("李四",19)
print(stu_l4.native_place)

 

    3.类方法的调用

     注:类方法和静态方法都可以被类和类实例调用,类实例方法仅可以被类实例调用。

#类方法的调用
stu_z3=Student("张三",18)
print(Student.cm())
print(stu_z3.cm())

4.静态方法的调用(和类方法调用相似)

#类方法的调用
stu_z3=Student("张三",18)
print(Student.sm())
print(stu_z3.sm())

 4.动态绑定属性和方法

    1.动态绑定属性

#动态绑定属性
stu_z3=Student("张三",18)
stu_l4=Student("李四",19)
stu_z3.nation="China"
print(stu_z3.nation)
#print(stu_l4.nation) {会自动报错}

     2.动态绑定方法

stu_z3.gpa=gpa
stu_z3.gpa()

5.面向对象的三大特征(与编程语言没有关系)

 6.封装(为了封装实例属性)

#coding=utf-8
class Student:
    def __init__(self,name,age):
        self.name=name
        self.__age=age    #这种定义方法就是希望程序员不要在类的外部直接访问age了,可能存在不安全的情况
    def show(self):
        print("{}在他{}岁的时候完成了他的第一个程序".format(self.name,self.__age))
stu_z3=Student("张三",17)

#外部使用实体属性都是间接的
stu_z3.show()

#如果直接使用__age这个实体属性
#print(stu_z3.__age)
print(stu_z3.name)

#如果直接使用__age这个实体属性
print(stu_z3.__age)

 

 但是如果你非要访问,那也没办法(就像抢atm机)

#但是如果你非要在类的外部访问
print(dir(stu_z3))
print(stu_z3._Student__age)

 7.继承(python支持多继承(父类可以写多个))

class Person(object):
    def __init__(self,name,age):
        self.age=age
        self.name=name
    def info(self):
        print("{}的年纪是{}".format(self.name,self.age))
class Student(Person):
    def __init__(self,name,age,stu_no):
        super().__init__(name,age)
        self.stu_no=stu_no
    def demo(self):
        print("我有我自己的学生id{}".format(self.stu_no))
class Teacher(Person):
    def __init__(self,name,age,tec_no):
        super().__init__(name,age)
        self.tec_no=tec_no
    def demo(self):
        print("我有我自己的教师id{}".format(self.tec_no))
stu_z3=Student("张三",17,"1433223")
tec_l4=Teacher("李四",30,"123456")
#两个子类调用自己的方法
print(stu_z3.demo())
print(tec_l4.demo())
#两个子类调用person类里面的实例方法
print(stu_z3.info())
print(tec_l4.info())

8.方法重写 

上面的info明显写的东西太少了,于是乎我们就可以重写info方法,让子类定义新的方法来取代父类书写不足的缺陷

 重写info方法,其中的super值得注意一下:

    def info(self):
        super(Student, self).info()
        print(self.stu_no)

    def info(self):
        super().info()
        print(self.tec_no)

 9.object类(类的默认继承)(所有对象都含有object类的属性和方法)

 主要就是理解str的作用,

未重写str

print(stu_z3)

重写了str

class Person(object):
    def __init__(self,name,age):
        self.age=age
        self.name=name
    def info(self):
        print("{}的年纪是{}".format(self.name,self.age))
    def __str__(self):
        return "{}的年龄是{}".format(self.name,self.age)
print(stu_z3)

 10.多态

 

 python就属于动态语言,然后person虽然继承的object类,但是person里面定义了eat实例方法,所以当定义了fuc(obj):

                        obj.eat

的时候,person同样可以使用func函数,也就是我们可以把这个person堪称一只鸭子

11.特殊属性

 

做算法比赛暂时还没用上,自己c一下,拔智齿了,不想写

12.特殊方法

两个主要的:__init__和__new__

拔完智齿好痛,写不下去了,烦请各位自己c一下,呜呜呜

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值