Python学习DAY8

第八章——两大编程思想:面向过程和面向对象

面向过程:简单的线性过程

面向对象:不能简单地使用线性表示,适合大型项目;

类和对象

python中不同的数据类型对应不同的类;

类的组成

class Student():
    school='beijingxxxxx'
    def __init__(self,name,age):
        self.name=name#左侧是实例属性,右侧是局部变量,此处将局部变量的值赋给实例;
        self.age=age
    def show(self):
        print(f'my name is:{self.name}',f'my age is:{self.age}')
    @staticmethod
    def name():
        print('静态方法不能调用实例方法实例属性')
    @classmethod
    def age(cls):
        print('类方法不能调用实例方法实例属性')
#创建类对象
stu=Student(name='文明6',age=18)
#实例属性使用对象名打点调用
print(stu.name,stu.age)
#类属性,直接使用类打点调用
print(Student.school)
#实例方法使用对象打点调用
stu.show()
#类方法和静态方法都使用类名打点调用
Student.age()
Student.name()

类的对象有多个

class Student():
    school='beijingxxxxx'
    def __init__(self,name,age):
        self.name=name#左侧是实例属性,右侧是局部变量,此处将局部变量的值赋给实例;
        self.age=age
    def show(self):
        print(f'my name is:{self.name}',f'my age is:{self.age}')
stu1=Student('zhang',18)
stu2=Student('awd',13)
stu3=Student('zhasdg',19)
stu4=Student('asf',24)
print(type(stu1))
Student.school='北大'
lst=[stu1,stu2,stu3,stu4]
for i in lst:
    i.show()#遍历列表中的对象,对象名打点调用实例方法

class Student():
    school='beijingxxxxx'
    def __init__(self,name,age):
        self.name=name#左侧是实例属性,右侧是局部变量,此处将局部变量的值赋给实例;
        self.age=age
    def show(self):
        print(f'my name is:{self.name}',f'my age is:{self.age}')
stu=Student(name='文明6',age=18)
stu2=Student(name='杀戮尖塔',age=20)
print(stu.name,stu.age)
print(stu2.name,stu2.age)
stu2.gender='jibao'
print(stu2.gender)
def dongtaibangding():
    print('我是普通函数,被动态绑定成stu2对象的方法')
stu2.dongtai=dongtaibangding()

封装、继承、多态

目录

第八章——两大编程思想:面向过程和面向对象

类和对象

类的组成

类的对象有多个

封装、继承、多态

封装

继承

多子类

多父类

方法重写(super().xxx())

多态

Object类

特殊方法

特殊属性

类的拷贝

赋值

浅拷贝

本章总结


封装

class Student():
    def __init__(self, name, age, score):
        self._name = name#受保护,本类子类使用
        self.__age = age#私有,本类使用
        self.score = score
    def _fun1(self):
        print('子类及本身可以访问')

    def __fun2(self):
         print('只有定义的类可以访问')
    def show(self):
        self._fun1()#类本身访问受保护的方法
        self.__fun2()
        print(self._name)
        print(self.__age)
stu=Student(name='df',age='18',score='25')
print(stu._name)
# print(stu.__age)AttributeError: 'Student' object has no attribute '__age'
#私有的方法访问形式
print(stu._Student__age)

另一种访问私有属性的方法@property

继承

多子类

多父类

继承多个父类时,调用父类的方法不能使用super,只能使用父类的名称区别;

方法重写(super().xxx()

对于父类的方法可以不调用,可以完全重写!

调用方法时,子类有自己的方法则调用子类自己的方法(包括重写过的父类的方法),没有才调用父类的方法;

多态

(在程序运行过程中动态地决定调用哪个方法)

Object类

重写__str__方法

特殊方法

特殊属性

如果继承N多个父类,那么调用默认第一个父类;

类的拷贝

赋值

变量的或者对象的赋值前后,只有一个对象,指向的是同一片内存空间;

浅拷贝

只是产生了一个新的对象,但是其子对象没有变;

深拷贝

本章总结

实战

1.

import math  #1
class Circle():
     def __init__(self, radius):
         self.radius = radius
     def get_area(self):
        return math.pi * self.radius ** 2
     def get_perimeter(self):
         return 2 * self.radius
r=eval(input("Enter the radius of the circle: "))
c=Circle(r)
area=c.get_area()
perimeter=c.get_perimeter()
print("The area of the circle is ", area)
print("The perimeter of the circle is ", perimeter)

2.

3.

class In():
    def __init__(self):
        pass
    def make_sound(self):
        pass
class erhu(In):
    def make_sound(self):
        print('二胡在弹奏')
class pinao(In):
    def make_sound(self):
        print('钢琴在弹奏')
class violin(In):
    def make_sound(self):
        print('小提琴在弹奏')
def main(obj):
    obj.make_sound()
er=erhu()
pi=pinao()
vi=violin()
main(pi)
main(vi)
main(er)

class Car():
    def __init__(self, type,no):
        self.type = type
        self.no = no
        def start(self):
            print('gogogo')
        def stop(self):
            print('stopstopstop')
class Taxi(Car):
    def start(self,type,no,company):
        super.__init__(type,no)
        self.company = company
    def start(self):
        print(f'我是{self.company}公司,车牌{self.no}')
    def stop(self):
        print('get out')
class Familycar(Car):
    def __init__(self,type,no,name):
        super.__init__(type,no)
        self.name = name
    def start(self):
        print(f'我是{self.name}')
    def stop(self):
        print('下车')
taxi=Taxi('asd','asd')
taxi.start()
taxi.stop()
family=Familycar('fengtian','jiang666','wudalang')
family.start()
family.stop()
  • 23
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值