day15:面向对象

一、面向对象

面向对象,更加注重过程的编程方法
面向对象三大特性:封装,继承,多态
py中所有的类都继承与一个父类

1、使用class建立类

#class 类
class Person:
   pass

给类加入属性:
#属性
name = “js”
age = 18
hair = “black”
给类加入方法:
def tell(self)

#class 类
class Person:
    #属性
    name = "js"
    age = 18
    hair = "black"
    
    #方法 self:谁调用就是谁
    def tell(self):
        print("my name is %s,age %s,hair is %s"%(self.name,self.age,self.hair))
    pass

2、实例化对象

使用 类名() 表示实例化一个对象

p = Person()
print(p.name)
p.tell()

3、使用构造方法

构造方法能够在实例化时就初始化实例

#class 类
class Person:
    #属性
    name = "js"
    age = 18
    hair = "black"
    #构造方法:在实例化的时候自动调用
    #如果定义了构造器则没有默认的缺省的构造器了
    def __init__(self,name,age):
        self.name = name
        self.age = age
    #方法 self:谁调用就是谁
    def tell(self):
        print("my name is %s,age %s,hair is %s"%(self.name,self.age,self.hair))
    pass
#类名() 表示实例化一个对象
p = Person("js",18)
p.tell()
p1 = Person("LY",14)
p1.tell()

4、访问原来的属性

可以通过Person.来进行访问

#访问原来属性:
print(Person.name)
print(Person.age)
Person.tell(p1) #self可以传入实例

注意:
可以看出,类中与实例中属性不同。
当调用传入参数中没有的属性时,对调用类属性

5、析构函数

当实例被回收时自动调用

class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    #析构函数,当实例被回收时自动调用
    def __del__(self):
        print("析构函数调用")
    def tell(self):
        print("mtname is %s,age %s"%(self.name,self.age))

p = Person("sj",18)
p.tell()
"""
当程序结束时,析构函数就会调用
"""

6、使用私有属性、私有方法

通过__ 就可以设置私有属性和私有方法:例如
__name
def __setName(self,name):

设置了私有之后,只能通过公有来调用

class Person:
    def __init__(self,name,age):
        #加两个下划线表示私有属性,不能直接被外部访问
        self.__name = name
        self.__age = age
    def getAge(self):
        return  self.__age
    def setAge(self,age):
        self.__age = age
    #可以设置私有方法,同理,只能通过公用方法调用
    def __setName(self,name):
        self.__name = name
    def setNamePass(self):
        pwd = 123
        res = int(input("请输入密码:"))
        if res == pwd:
            self.__setName("haha修改成功")
        else:
            print("pass word error")
    def tell(self):
        print("mtname is %s,age %s"%(self.__name,self.__age))

p = Person("sj",18)
p.tell()
print(p.getAge())
p.setAge(10)
p.tell() #可以看出修改成功

p.setNamePass()
p.tell()

7、继承、重写、拓展

继承,括号内填写父类,这样就能够拥有父类的方法属性,减少重复工作

#继承,括号内填写父类,如
class MtList(list):
    pass

在继承中,经常引用其他文件中的类
通过 if name == ‘main’ 可以只导入功能,在继承时十分常用

一个小练习如下:

from day15.面向对象 import Person
#通过 if __name__ == '__main__' 可以只导入功能,
p = Person("LS",18)
p.tell()

class Basterd(Person):
    #方法拓展,在保留父类方法时拓展
    def __init__(self,name,age,badhobby):
        super().__init__(name,age)
        self.badhobby = badhobby
    #方法重写,完全覆盖父类方法
    def tell(self):
        print("我叫%s,age %s,我爱%s"%(self.name,self.age,self.badhobby))
"""
建立一个坏弹类,
坏蛋是一个人,
坏蛋有他特殊的属性与发方法
"""
if __name__ == '__main__':
    p = Basterd("ly",18,"打架")
    p.tell()

其中,init()用到了拓展,
tell()则是直接覆盖了

8、小练习

class Clip:
    def __init__(self,bullet):
        self.bullet = bullet
class Gun:
    def __init__(self,clip):
        self.clip = clip
    def fier(self,n):
        if self.clip.bullet > n:
            self.clip.bullet -= n
            print("开枪;还剩%s发子弹"%(self.clip.bullet))
            for i in range(n):
                print("tu~")
        else:
            print("子弹不够啦,上子弹啊!")
class Person:
    def __init__(self,gun):
        self.gun = gun
    def fill(self,n):
        self.gun.clip.bullet += n
        print("上弹成功,还有%s发"%(self.gun.clip.bullet))
from day15.clip import *
from day15.gun import *
from day15.Person import *

c = Clip(10)
g = Gun(c)
p = Person(g)
for i in range(4):
    p.gun.fier(3)
p.fill(5)
for i in range(4):
    p.gun.fier(3)
"""
运行效果
开枪;还剩7发子弹
tu~
tu~
tu~
开枪;还剩4发子弹
tu~
tu~
tu~
开枪;还剩1发子弹
"""
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以给你提供一个简单的示例代码,用于实现一个课程表的功能。 ```python class Course: def __init__(self, course_name, course_time): self.course_name = course_name self.course_time = course_time class Schedule: def __init__(self): self.schedule = {} def add_course(self, day, course_name, course_time): if day not in self.schedule: self.schedule[day] = [] self.schedule[day].append(Course(course_name, course_time)) def get_schedule(self): for day, courses in self.schedule.items(): print(day) for course in courses: print("\t", course.course_time, course.course_name) # 示例用法 my_schedule = Schedule() my_schedule.add_course("Monday", "Math", "9:00-10:30") my_schedule.add_course("Monday", "Science", "11:00-12:30") my_schedule.add_course("Tuesday", "English", "10:00-11:30") my_schedule.get_schedule() ``` 这个示例代码中,我们定义了两个类 `Course` 和 `Schedule`。`Course` 类表示一个具体的课程,包括课程名称和上课时间;`Schedule` 类则表示一个课程表,其中包含了每天的课程安排。在 `Schedule` 类中,我们定义了 `add_course` 和 `get_schedule` 两个方法,分别用于添加课程和输出课程表。 在示例中,我们先创建了一个 `Schedule` 对象 `my_schedule`,然后通过 `add_course` 方法添加了几个课程,最后调用 `get_schedule` 方法输出了整个课程表。输出结果如下: ``` Monday 9:00-10:30 Math 11:00-12:30 Science Tuesday 10:00-11:30 English ``` 你可以根据自己的需要修改这个示例代码,添加更多的功能和属性,来实现一个更完整的课程表。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值