初识面向对象

定义:

拥有共同属性和方法的一类事物,比如 人类、动物类等

对象:

具体的某一个事物。 类下面的调用者就是对象,比如说动物一类,它下面的对象有猪、狗等 

在编程的世界里是先有类后有对象 

类是实例的抽象,父类是子类的抽象。而对象是类中方法或属性实例出来的

创建类和对象 :

对象 = 类名 (这里写上你对应的参数值,self不用传值)
调用方法:
对象.函数名()

 

类的属性:

 类名.类属性

 类名.类方法(不能调用 )

 

对象的属性:

对象名.对象属性 对象名.类属性

对象名.方法()(调用方法,也叫做调用 动态属性)

面向对象之间的交互:

在多个面向对象之间互相的调用

 

计算面积和周长

import math
class Round:
    def __init__(self,radius):
        self.radius = radius
    def area(self):
        print('round is area%s'%(math.pi*self.radius**2))
    def primeter(self):
        print('round is primeter%s'%(math.pi*self.radius*2))
round = Round(10)
round.area()
round.primeter()

 

类的命名空间

对于类的静态属性:(属于类内部的命名空间)

类.属性: (调用解释类的属性)

对象.属性: 就是先从自己的命名空间寻找如果有应用自己的,没有就到类里去寻找

class A:
    ret = 'fang'
a = A()
print(A.ret)
print(a.ret)
a.ret = 'fangjie'
print(a.ret)
print(A.ret)

 

类的动态属性(方法):(属于类内部的命名空间)

这个方法本身就存在于类的空间,根本不会存在对象 的内存中

如果用对象调用类的方法,需要在类的内存中产生一个地址 来对应类中的方法

class A:
    def func(self):
        print(111)
a = A()
a.func()
a.func = 888
print(a.func)
a.func()  # 这个打印的是 666() int 是不能被调用的

 

 对象的属性:是通过init 方法初始化得来的

(类内和self发生联系类外和对象名发生联系)

对象的属性只存在于对象的命名空间

只能被对象来调用和修改,如果类来调用就会报错

class A:
    pass
a = A()
a.name = 'alex'
print(a.name)
print(A.name)  #没有属性name 会报错

 

面向对象的组合:

一个类的对象是另一个类的属性 。 

组合表达是什么和什么的关系

组合的好处: 增强了代码的重用性

 

import math
class Round:
    def __init__(self,radius):
        self.radius = radius
    def area(self):
        return math.pi*self.radius**2
    def primeter(self):
        return math.pi*self.radius*2
class BSRound:
    def __init__(self,bradius,sradius):
        self.bradius = Round(bradius)
        self.sradius = Round(sradius)
    def area(self):
        return self.bradius.area() - self.sradius.area()
    def primeter(self):
        return self.bradius.primeter() - self.sradius.primeter()
round = BSRound(10,5)
print(round.area())
print(round.primeter())

 

class Course:
    def __init__(self,course_name,period,price,teacher):
        self.course_name = course_name
        self.period = period
        self.price = price
        self.teacher = teacher
class Student:
    def __init__(self,name,sex,age,course):
        self.name = name
        self.sex  = sex    
        self.age = age
        self.course = course
course = Course('Python',8,20000,'')
student = Student('田振江','',27,course)
print(student.course.period)
print(student.course.teacher)
print(student.course.course_name)

 

转载于:https://www.cnblogs.com/tianjianng/p/7522765.html

资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 在ASP.NET开发中,定时任务是一种常见功能,用于在固定时间间隔内执行特定操作,比如数据同步、清理缓存或发送通知等。以下是实现ASP.NET定时任务的详细步骤和关键要点: ASP.NET定时任务通常通过System.Threading.Timer或System.Timers.Timer实现,二者都能周期性触发事件。在ASP.NET中,可以利用后台线程或HttpApplication生命周期事件来启动定时器。 System.Threading.Timer:适合在独立线程上运行任务,避免阻塞主线程,适合轻量级任务。 System.Timers.Timer:在多线程环境下,它会自动管理线程,更适合服务器端复杂任务。 创建定时器对象,设置Interval属性为10000毫秒(10秒),并注册Elapsed事件。该事件会在每个时间间隔结束时触发。 在Elapsed事件中编写要执行的代码,确保代码执行效率高,避免阻塞,因为长时间运行的任务可能影响其他请求。 通过Timer.Start()启动定时器,Timer.Stop()停止定时器。在ASP.NET中,可以在Application_Start和Application_End事件中控制定时器的启动和停止,确保服务器启动时定时器开始运行,关闭时停止。 在多用户环境下,如果定时任务会修改共享状态,必须考虑线程安全问题,可以使用锁或其他同步机制来确保数据一致性。 将应用程序部署到IIS时,需设置应用程序池的回收策略,避免定时任务因应用程序回收而中断。同时,确保IIS配置支持长时间运行的请求。 为定时任务添加日志记录非常重要,可以帮助排查问题并监控任务执行情况。 定时任务过于频繁可能会影响服务器性能,进而影响其他请求的响应时间。可根据需求调整时间间隔,或
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值