Python基础之面向对象编程

本文介绍了Python中的面向对象编程,包括类和实例的创建、数据封装、访问限制、继承和多态的概念。还讲解了如何获取对象信息以及实例属性和类属性的差异。通过实例展示了如何定义和使用这些概念。

类和实例

  在python中,定义类是通过class关键字。

class Student(object):
	pass

  定义好了类,就可以通过类创建出类的实例,创建实例是通过类名+()实现的

bart = Student()

  就是一个Student的实例
  由于类可以起到模板的作用,因此可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的__init__方法,在创建实例的时候,就把name,score等属性绑上去:

class Student(object):
	def __init__(self, name, score):
		self.name = name
		self.score = score

  __init__方法的第一个参数永远是self,表示创建的实例的本身,因此在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。

数据封装

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
        
    def get_grade(self):
        if self.score >= 90:
            return 'A'
        elif self.score >= 60:
            return 'B'
        else:
            return 'C'
        
lisa = Student('Lisa', 90)
bart = Student('Bart', 59)
print(lisa.name, lisa.get_grade())
print(bart.name, bart.get_grade())

访问限制

  如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在python中,实例的变量名如果以__开头,就变成了一个私有变量,只有内部可以访问,外部不能访问。

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
    
    def print_score(self):
        print('%s:%s' % (self.__name,self.__score))

  如果外部需要获得内部的属性或修改内部的属性,可以使用setget方法。

class Student(object):
	...
	def get_name(self):
		return self.__name
	def set_name(self, name):
		self.__name = name

继承和多态

  编写一个名为Animal的class,有一个run()方法可以直接打印:

class Animal(object):
    def run(self):
        print('Animal is running...')

class Dog(Animal):
    def run(self):
        print('Dog is running...')
    def eat(self):
        print('Dog is eating')

class Cat(Animal):
    pass

def run_twice(animal):
    animal.run()
    animal.run()

dog = Dog()
print(dog.run())

cat = Cat()
print(cat.run())

print(run_twice(Animal()))

获取对象信息

判断对象类型可以使用type()函数。基本类型都可以用type()函数判断,如果一个变量指向函数或者类,也可用type()判断。type()函数返回对应的class类型。

print(type(123))
print(type('str'))
print(type(abs))
print(type(123)==type('str'))

  要判断一个对象是否是函数,可以使用types模块中定义的常量

import types
def fn():
    pass
print(type(fn) == types.FunctionType)
print(type(abs) == types.BuiltinFunctionType)
print(type(lambda x: x) == types.LambdaType)
print(type((x for x in range(10))) == types.GeneratorType)

  对于class的继承关系来说,使用type()就很不方便,可以使用isinstance()函数。能用type()判断的基本类型也可以用isinstance()判断,并且还可以判断一个变量是否是某些类型中的一种。

h = Husky()
print(isinstance(h, Husky))
print(isinstance([1, 2, 3], (list, tuple)))

如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list。

print(dir('abc'))

  类似__xxx__的属性和方法在python中都是有特殊用途的,比如__len__方法返回长度。在python中,如果你调用len()函数试图获取一个对象的长度,实际上,在len()函数内部,它自动去调用该对象的__len__()方法,所以,下面的代码是等价的。

print(len('abc'))
print('abc'.__len__())

实例属性和类属性

给实例绑定属性的方法是通过实例变量,或者通过self变量

class Student(object):
    def __init__(self, name):
        self.name = name
        
s = Student('Bob')
s.score = 90

  给类本身绑定一个属性,可以直接在class中定义属性,这种属性是类属性,归类所有。

class Student(object):
    name = 'Student'
基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值