我的Python3学习笔记(3):面向对象

Python学习笔记-面向对象 Python面向对象 阅读详情

面向对象

模块

导入

Python导入有两种形式

一是importmodule,这种形式还得写全名。不同于Java

例如:

import cmath
cmath.sqrt

另一种是

from module import function.
from somemodule import somefunction, anotherfunction, yetanotherfunction

这种情况下就可以直接写函数名。

模块别名

>>>import math as foobar
>>>foobar.sqrt(4)
2.0


函数别名

>>>from math import sqrt as foobar
>>>foobar(4)
2.0

重新加载

importimp
reload(module)


类

类创建

__metaclass__= type # Make sure we get new style classes
 
classPerson:
       def setName(self, name):
              self.name = name
       def getName(self):
              return self.name
       def greet(self):
              print "Hello, world! I'm%s." % self.name

 

1,最上面的赋值是用来把这个类变成Python新式类,另外也可以继承一个新式类来把这个类变成新式类。Python 3中都是新式类,因此没有这个问题。

例如:

class Person(object)

2,每一个实例方法第一个参数必须是self。

3,实例变量加入对象的规则是:第一次访问这个变量时,把这个变量加入这个类中。动态语言中的类就像原型编程中的对象槽。比如这个里面没有任何的实例变量的声明。

构造方法

class ClassName(object):
       """docstring forClassName"""
       def __init__(self, arg):
              super(ClassName, self).__init__()
              self.arg = arg

 

1,如同Java一样,Python覆盖一个有参数的构造方法的时候必须显示调用父类的构造方法。使用super。

2,注意形式:这个函数前后都是两个下划线。

构造器重载

Python不支持方法重载,因为Python是动态类型语言,所以方法重载可以通过缺省参数值来实现。如果真要实现方法重载,可以使用多参数。

调用父类构造器
使用非绑定方法

class SongBird(Bird):
       def __init__(self):
              Bird.__init__(self)
              self.sound = 'Squawk!'
       def sing(self):
              print self.sound

 

这里直接调用了父类的构造器,但是由于这个时候并没有绑定任何的实例,因此这个时候可以提供子类对象self。也就是说吧父类的构造器绑定到子类对象上面。

Super

class ClassName(object):
       """docstring forClassName"""
       def __init__(self, arg):
              super(ClassName, self).__init__()
              self.arg = arg


这种方法首先给super绑定子类和子类对象,然后就可以调用init方法。

访问控制

Python中使用前缀来表示其访问控制,不以下划线开头的实例变量都是共有的。

>>>foo.name
'LukeSkywalker'
>>>bar.name = 'Yoda'
>>>bar.greet()
Hello, world! I'm Yoda.

私有化

一个类中的实例变量如果是双下划线开头的,那么这个实例变量就是私有的,访问他们会出错。

class Secretive:
       def __inaccessible(self):
              print "Bet you can't seeme..."
       def accessible(self):
              print "The secret messageis:"
              self.__inaccessible()

getter和setter
使用描述器

>>>class Rectangle(object):
    def __init__(self):
        self.width = 0
        self.height = 0
    def setSize(self, size):
        self.width, self.height = size
    def getSize(self):
        return self.width, self.height
    size = property(getSize, setSize)
 
   
>>>r = Rectangle()
>>>r.width = 2
>>>r.height = 5
>>>r.size
(2,5)
>>>r.size = 10,20
>>>r.size
(10,20)
 


这种方法就是结合访问器方法和property函数来实现一个属性的getter和setter,如果属性是私有的。那么size就可以以公有的形式来访问了。

实现方法

class Rectangle(object):
    def __init__(self):
        self.width = 0
        self.height = 0
    def setSize(self, size):
        self.width, self.height = size
    def getSize(self):
        return self.width, self.height
    size = property(getSize, setSize)


 

在这个代码中实际上使用了描述器,一个描述器就是一个具有__get__和__set__的类。这样对于这个对象的任何任何的访问都会把它转义到这个描述器中的__get__和__set__方法中。

这儿property其实是一个类,

def prop(getter, setter, deleter):
    class PropDesc:
        def __get__(self, instance, owner):
            return getter(instance)
        def __set__(self, instance, value):
            setter(instance, value)
        def __delete__(self, instance):
            deleter(instance)
           
    return PropDesc()


可以看到这个函数返回了一个对象,这个对象就是一个描述符,借助于描述符的简便的访问规则。这个属性访问的时候就想一个普通属性那样自然。

使用修饰器

class Ball:
    def __init__(self, radius):
        if radius <= 0:
            raise ValueError('必須是正數')
        self.__radius = radius
   
    @property
    def radius(self):
        return self.__radius
       
    @radius.setter
    def radius(self, radius):
        self.__radius = radius
   
    @radius.deleter
    def radius(self):
        del self.__radius


 

根据修饰器的规则:property是一个函数,因此在@property出现的地方其实是创建了一个对象radius,然后后面的两个修饰器则是使用了这个对象,并且把他们变成了property的一个函数。

实例方法的动态性

1,一个实例方法既可以被重新赋值
>>>class Class:
                     def method(self):
                            print 'I have aself!'
>>>def function():
                     print "Idon't..."
>>>instance = Class()
>>>instance.method()
Ihave a self!
>>>instance.method = function
>>>instance.method()
Idon't...


2,实例方法也可以赋值给其他的方法

>>>class Bird:
       song = 'Squaawk!'
       def sing(self):
              print self.song
>>>bird = Bird()
>>>bird.sing()
Squaawk!
>>>birdsong = bird.sing
>>>birdsong()
Squaawk!


类方法

1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数;

2)从第1条,静态方法是无法访问实例变量的,而类成员方法也同样无法访问实例变量,但可以访问类变量;

3)静态方法有点像函数工具库的作用,而类成员方法则更接近类似Java面向对象概念中的静态方法,也就是说静态方法使用的使用Python类的命名空间的作用。

例如:

class MyClass:
       @staticmethod
       def smeth():
              print 'This is a static method'
       @classmethod
       def cmeth(cls):
              print 'This is a class method of',cls
 


4)。同Java,Python中的类方法不会被继承。

类变量

在类体中声明的变量就是类变量。类变量和Java中的类变类一致,但是Python中比较混淆。尤其是类变量必须通过self来访问,也可以使用类名来引用。

注意:在实例方法中调用类变量的时,必须加上self。

 

例如:

>>>class Bird:
       song = 'Squaawk!' #1
       def sing(self):
              print self.song #2
>>>bird = Bird()
>>>bird.sing()
Squaawk!
>>>Bird.sing()


 

类变量在类本身和类实例间共享。

class MemberCounter:
       members = 0
       def init(self):
              MemberCounter.members += 1
>>>m1 = MemberCounter()
>>>m1.init()
>>>MemberCounter.members
1
>>>m2 = MemberCounter()
>>>m2.init()
>>>MemberCounter.members
2


调用

类层次方法既可以用对象引用来调用它,也可以使用类来调用调用结果都是一样的。

魔法方法

序列和字典

字典和序列都是根据一个规则来声明的,也就是按照鸭子类型的说法:如果他有鸭子的行为,那么他就是一个鸭子。如果实现下面的方法,那么这个类就是一个序列

1,__len__

返回这个集合中元素的个数,如果返回值是0,那么表示这个集合没有任何元素,并且在boolean环境下他表示的是False。

2,__getitem__(self,key)

得到指定键的值。对于序列来说他可能是一个数值,对于一个字典来说这个键可能是任何可以作为键的值。

3,__setitem__(self,key,value)

同上,只是这个是用来设置这个序列的一个值。

4,__delitem__(self,key)

这个方法用来删除一个元素。

Python对象属性

dict字典

这些对象的属性方法都是默认和Python对象中的__dict__打交道,也就是说他们都是在操作__dict__这个字典。

 

例如:            

>>>class Foo(object):
...     def __getattr__(self, name):
...         return "Value of %s" % name
>>>foo = Foo()
>>>foo.just_this = "Some value"
>>>foo.just_this
'Somevalue'
>>>foo.something_else
'Value ofsomething_else'


__getattribute__(self,name)

Python2.2 及之后版本中,您可以选择使用 .__getattribute__() 方法,代替具有类似名称且易被混淆的老式.__getattr__() 方法。如果使用的是新式的类(一般情况下总是如此),您就可以这样做。.__getattribute__()方法比它的同类方法更为强大,因为不管属性是不是在 obj.__dict__ 或 obj.__slots__ 中定义的,它将拦截所有 属性访问。使用.__getattribute__() 方法的一个缺点是,所有访问都需通过该方法。如果您使用这种方法,并希望返回(或操作)属性的 “real” 值,则需要进行少量特殊的编程:通常可通过对超类(一般为 object)调用 .__getattribute__() 实现。例如:

 

>>>class Foo4(object):
...     def __getattribute__(self, name):
...         try:
...             returnobject.__getattribute__(self, name)
...         except:
...             return "Value of %s" %name
...
>>>foo4 = Foo4()
>>>foo4.x = 'x'
>>>foo4.x
'x'
>>>foo4.y
'Value of y'


__getattr__(self,name)

如果把一个对象看做一个属性槽,那么这个就是用来得到name的属性。不同于__setattr__的是__getattr__值拦截没有在对象中定义的属性。也就是说__getattr__是用来收拾烂摊子的。

 

class Foo(object):
       def __init__(self):
              self.name="ssj"
 
       def __getattr__(self, name):
              return "Value of %s" %name
 
>>>import Main
>>>foo = Main.Foo
>>>foo = Main.Foo()
>>>foo.name
'ssj'
>>>foo.time
'Valueof time'
>>> 


__setattr__(self,name)

 

class Rectangle:
       def __init__(self):
              self.width = 0
              self.height = 0
       def __setattr__(self, name, value):
              if name == 'size':
                     self.width, self.height =value
              else:
                     self.__dict__[name] = value
       def __getattr__(self, name):
              if name == 'size':
                     return self.width,self.height
              else:
                     raise AttributeError


 

__setattr__会拦截所有的属性访问请求,因此:不能仅仅关注访问的属性是size的时候,还有注意如果属性不是size,那么把他放到这个对象的属性槽里面。如果不实现加入__dict__这一步,甚至连实例属性都没法声明,因为每次要设定实例属性的时候都会访问__setattr__,但是他没有实现任何的方法,因此会抛出异常。

class Foo(object):
       def __init__(self):
              self.name="ssj"
 
       def __getattr__(self, name):
              return "Value of %s" %name
 
       def __setattr__(self,name,value):
              print("__setattr__ in theway!!!")


 

结果:

>>>foo = Main.Foo()
__setattr__in the way!!!
>>>foo.name
'Valueof name'
>>>foo.name = "ssj"
__setattr__in the way!!!
>>>foo.name
'Valueof name'


可以看到name这个属性并没有在对象中,因为__setattr__被覆盖。

__delattr__(self,name)

删除一个属性。

hasattr函数

这个函数和__getattr__协同工作,当__getattr__放回值时,那么判断为True,如果__getattr_抛出AttributeError,那么结果为False。但是如果抛出其他异常hasattr也会抛出异常。

默认情况

__slots__

这个类中的元组规定了可以加入对象__dict__的名称,也就是说只有在

__slots__中出现的属性名称才能加入到__dict__中。

 

>>>class Foo2(object):
...     __slots__ = ('just_this')
...     def __getattr__(self, name):
...         return "Value of %s" % name
>>>foo2 = Foo2()
>>>foo2.just_this = "I'm slotted"
>>>foo2.just_this
"I'mslotted"
>>>foo2.something_else = "I'm not slotted"
AttributeError:'Foo' object has no attribute 'something_else'
>>>foo2.something_else
'Valueof something_else'


可以看到,这个并没有影响__getattr__的使用,仅仅是使得__setattr__的执行不成功。

结合使用 .__setattr__ 和 .__slots__

>>>class Foo3(object):
...     __slots__ = ('x')
...     def __setattr__(self, name, val):
...         if name in Foo.__slots__:
...             object.__setattr__(self, name,val)
...     def __getattr__(self, name):
...         return "Value of %s" % name
...
>>>foo3 = Foo3()
>>>foo3.x
'Valueof x'
>>>foo3.x = 'x'
>>>foo3.x
'x'
>>>foo3.y
'Valueof y'
>>>foo3.y = 'y'   # Doesn't do anything, butdoesn't raise exception
>>>foo3.y
'Value of y'


迭代器

迭代器是一个有next方法的对象(在Python3中迭代器对象应该实现__next__方法)。迭代器对象应该每次放回下一个对象,如果没有下一个对象放回,那么应该抛出StopIteration异常表示结束。

 

一个类的__iter__方法用来放回迭代器。

如:

classFibs:
       def __init__(self):
              self.a = 0
              self.b = 1
       def next(self):
              self.a, self.b = self.b,self.a+self.b
              return self.a
       def __iter__(self):
              return self


迭代器到列表

调用list方法可以把一个迭代器装换成列表。

>>>class TestIterator:
       value = 0
       def next(self):
              self.value += 1
              if self.value > 10: raise StopIteration
              return self.value
       def __iter__(self):
              return self
              ...
>>>ti = TestIterator()
>>>list(ti)
[1, 2, 3, 4, 5, 6, 7, 8,9, 10]


描述器

描述符是吧一个对象变成一个操作和基本类型相同的方法。因此这样的对象既可以像普通对象那样访问,又可以借组于强大的类定义各种使用这个对象的方法。得到的结果就是一个描述符。

 

例如:

class Descriptor:
    def __get__(self, instance, owner):
        print(self, instance, owner)
    def __set__(self, instance, value):
        print(self, instance, value)
    def __delete__(self, instance):
        print(self, instance)
 
class Some:
    x = Descriptor()

 

使用:

s =Some()

s.x

s.x= 10

dels.x


传统的对象都是用来引用他的属性的,但是这儿的x虽然也是一个对象,但是他的使用就好像一个基本类型的实例变量一样。

这些对于x的访问其实就是

s =Some()
Some.__dict__['x'].__get__(s,  Some);
Some.__dict__['x'].__set__(s,  10);
Some.__dict__['x'].__delete__(s);

描述器和__getattr__类方法的区别

描述器是用来规定一个类的对象本身被存取的时候所发生的动作。而__getattr__则规定的是一个类的实例属性访问的时候的动作。比如一个对象如果同时定义了这两个方法的时候.

class Difference(object):
    def __get__(self, instance, owner):
        print("__get__")
 
    def __set__(self, instance, value):
        print("__set__")
 
    def __delete__(self, instance):
        print("__delete__")
 
    def __getattr__(self,name):
        print("__getattr__")
 
    def __setattr__(self,name,value):
        print("__setattr__")
 
class MyWapper(object):
    d = Difference()
 
m =MyWapper()
m.d
m.d= 10
delm.d
m.d.sjsjjs
m.d.sjsjshs=10
delm.d.sjhjhshjs
结果
__get__
__set__
__delete__
__get__


__call__()

__call__方法就是让一个对象成为可执行的,也就是说可以按照函数那样的语法来调用。

class Some:
    def __call__(self, *args):
        for arg in args:
            print(arg, end=' ')
        print()
 
s =Some()
s(1)
s(1,2)
s(1, 2, 3)


继承内建类

在新版Python中可以继承内建类,这样就可以方便的建立一个列表或者字典了。

class CounterList(list):
       def __init__(self, *args):
              super(CounterList,self).__init__(*args)
              self.counter = 0
       def __getitem__(self, index):
              self.counter += 1
              return super(CounterList,self).__getitem__(index)


Monkey Patch

由于动态语言中的对象个作用域的动态性,我们可以在代码中动态的改变一个属性,方法或者函数。事实上在Ruby,Python和其他的动态语言中。对象和作用域都是一个属性槽。因此改变他们也没什么难的。

继承

class Filter:
       def init(self):
              self.blocked = []
              def filter(self, sequence):
                     return [x for x in sequence if x not in self.blocked]
class SPAMFilter(Filter): # SPAMFilter is a subclass of Filter
def __init__(self): # Overrides init method from Filter superclass
       self.blocked = ['SPAM']


多继承

一个类可以继承多个父类,如果多个方法有重名。那么使用在前面的类的方法。

对象创建

>>>foo = Person()
>>>bar = Person()
>>>foo.setName('Luke Skywalker')
>>>bar.setName('Anakin Skywalker')
>>>foo.greet()
Hello,world! I'm Luke Skywalker.
>>>bar.greet()
Hello, world! I'm AnakinSkywalker.


异常

自定义异常类

class SomeCustomeException(Exception):pass;


捕获异常

try:
       x = input('Enter the first number: ')
       y = input('Enter the second number: ')
       print x/y
exceptZeroDivisionError:
       print "The second number can't bezero!"


Python中的异常没有参数,如果要重新抛出,那么直接使用raise就可以:

class MuffledCalculator:
       muffled = False
       def calc(self, expr):
              try:
                     return eval(expr)
              except ZeroDivisionError:
                     if self.muffled:
                            print 'Division byzero is illegal'
                     else:
                            raise


多个Except

try:
       x = input('Enter the first number: ')
       y = input('Enter the second number: ')
       print x/y
except ZeroDivisionError:
       print "The second number can't bezero!"
except TypeError:
       print "That wasn't a number, was it?"


多个Exception

try:
       x = input('Enter the first number: ')
       y = input('Enter the second number: ')
       print x/y
except(ZeroDivisionError, TypeError, NameError):
       print 'Your numbers were bogus...'


捕获异常对象

try:
       x = input('Enter the first number: ')
       y = input('Enter the second number: ')
       print x/y
except(ZeroDivisionError, TypeError), e:
       print e


全捕获

try:
       x = input('Enter the first number: ')
       y = input('Enter the second number: ')
       print x/y
except:
       print 'Something wrong happened...'


else子句

while True:
       try:
              x = input('Enter the first number:')
              y = input('Enter the secondnumber: ')
              value = x/y
              print 'x/y is', value
       except:
              print 'Invalid input. Please tryagain.'
       else:
              break


finally子句

try:
       1/0
except NameError:
       print "Unknown variable"
else:
       print "That went well!"
finally:
       print "Cleaning up."




        
[Python] Python学习笔记:面向对象 慕课北京大学陈斌老师python课 学习笔记 面向对象 阅读详情

相关推荐

分布式定时任务(XXL-JOB)整合达梦数据库 带源码

背景 1. 因公司需要可视化管理配置调度任务,查询项目选择XXL-JOB,它是开源项目,入手很简单,详情可以参考官方文档; 2. 因项目的机密性,选择数据库为国内知名的达梦数据库7,与Java项目的整合详情可以参考SpringBoot 集成 达梦数据库 maven依赖本地jar包; 3. 因XXL-JOB暂时没有找到集成达梦数据库的案例,博主自己整合DM7踩过很多的坑,特此整合一个简单可直接...

艾斯-李的博客 3814

Python3----------抽象(多态、封装、继承等)

多态、封装、继承等使用

weixin_44119674的博客 500

用Blender给ArduPilot无人船编队设计灯光秀:从建模到飞行的保姆级教程

本文详细介绍了如何利用Blender和ArduPilot为无人船编队设计灯光秀的全流程技术方案。从3D动画设计、坐标转换、数据导出到ArduPilot飞控配置和灯光控制,提供了一套完整的保姆级教程,帮助开发者实现水面灯光编队表演。

weixin_29213525的博客 386

学习笔记:Python3 面向对象

仅为个人查阅使用,如有错误还请指正。 面向对象编程就是一种程序设计思想。把对象当作程序的基本单元,一个对象包含了数据和操作数据的函数。 这种设计思想是从自然界中来的。因为在自然界中,类(Class)和实例(Instance)的概念是很自然的。Class是一种抽象概念,比如我们定义一个运动员类:Class-Player,是指运动员这个概念,而实例(Instance)则是一个个具体的Play...

weixin_30367945的博客 162

FIFO的工作原理及其设计

FIFO( First Input First Output)简单说就是指先进先出。FIFO存储器是一个先入先出的双口缓冲器,即第一个进入其内的数据第一个被移出,其中一个口是存储器的输入口,另一个口是存储器的输出口。对于单片FIFO来说,主要有两种结构:触发导向结构和零导向传输结构。触发导向传输结构的FIFO是由寄存器阵列构成的,零导向传输结构的FIFO是由具有读和写地址指针的双口RAM构成。FIFO与普通RAM存储器的是没有外部读写地址线(指针),使用方便,但。

Jackiezhang1993的博客 2万+

【OpenClaw企业级智能体实战】第11篇:制造业设备预测性维护实战——OpenClaw+DeepSeek+Prometheus从零搭建(附完整代码)

本文聚焦制造业设备预测性维护的核心痛点,基于OpenClaw v2026.2.1、DeepSeek智能诊断、Prometheus监控等工具,拆解“设备状态监控→智能故障诊断→预测性维护”三大核心场景。从技术原理、算法构建、实操流程到完整代码实现,提供“数据采集→模型训练→智能调度→自动处置”的全链路方案。方案遵循工业安全规范,采用“只读优先、权限最小化”原则,适配中小制造企业落地需求。通过虚拟案例验证,可使设备非计划停机时间下降65%、平均修复时间缩短47%,既适合新手快速入门,也为进阶读者提供架构优化思路

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 606

Python3.6学习笔记总结3:面向对象编程

面向对象编程 面向对象编程 Object Oriented Programming 简称 OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。 而面向对象的程序设计把计算...

京Python 221

秋叶ComfyUI整合包使用FRP实现公网访问教程 ComfyUI内网穿透 秋叶整合包

最近在做 ComfyUI 的实验时,我发现很多小伙伴都遇到一个问题:本地启动的 ComfyUI 服务只能在本地访问,想要通过公网远程访问,就必须借助来实现。作为一名前端开发工程师,我花了点时间把 ComfyUI 启动器和 FRP 配置整合了一下,今天就分享给大家。本文适合已经了解。需要注意的是 穿透到公网的话任何人都能访问 为了安全建议看我另一篇帖子加上密码验证 防止恶意攻击。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1347

Python 3 学习笔记:面向对象编程

概述 面向对象编程(Object Oriented Programming,即 OOP),是一种程序设计思想,比面向过程编程更加灵活,更易扩展。 Python 在设计的时候就是按照面向对象编程的思想设计的,像我们前面学过的各种数据类型,如字符串、列表、字典等都是一个个对象,它们都具有各自的属性和行为。 面向对象编程就是将客观存在的事物,总结提炼出它们各自的属性与行为,然后通过编程的方法形成一个模版...

boqia3649的博客 214

双重分组进位跳跃进位链

跳跃进位链

qq_62260432的博客 941

SQL注入详解

SQL注入(SQL Injection)是一种常见的Web安全漏洞,主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱库、被删除、甚至整个服务器权限陷)。 即:注入产生的原因是后台服务器接收相关参数未经过滤直接带入数据库查询...

渗透之路,攻防之间皆学问 26万+

python3学习笔记:初探面向对象

面向对象编程(oop)是将数据和对数据的操作行为放在一起 三大特性:封装,继承,多态 封装:把客观事物封装为抽象的类,把数据和数据操作方式放在一起,只让信任的类和对象操作 继承:子类继承父类的属性 多态:同一个类的实例对同一个方法有不同的表现形式 继承的书写: class people: pass class human(people) pass @property的使用 把对函数的调用改成了对...

Whystarta_z的博客 249

基于深度学习的航拍图像中地物变化检测

随着无人机技术的飞速发展,航拍图像成为获取地表信息的重要手段之一。然而,由于地球表面的不断变化,监测和识别航拍图像中的地物变化成为一项具有挑战性的任务。在人工智能领域,深度学习技术的兴起为地物变化检测提供了全新的解决方案。本文将介绍基于深度学习的航拍图像中地物变化检测的方法,并附上相应的代码实例。

一键难忘的博客 4176

Python基础学习笔记——面向对象(3):面向对象的特点、继承

面向对象 面向对象的特点 面相对想的三大特性:封装、继承、多态 封装 通俗理解:把属性和方法放到类里面的操作可以认为是封装,封装还可以控制属性和方法的访问权限,比如:把方法改成私有的。 将数据及相关操作打包在一起; 支持代码复用。 继承 定义:子类(subclass)借用父类(superclass)的行为。子类继承父类,可以直接使用父类的属性或者方法。 只能继承公有属性和公有方法,一个子...

鬼义虎神的学习笔记 271

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python3:面向对象编程学习笔记(1)

面向对象设计(笔记) 面向对象 对象和类 指定属性和行为 隐藏细节并且创建公共接口 组合和继承 一、面向对象 在软件开发中,对象通常不是实体的,而是实体的东西的模型,这些模型可以做特定的事情并且特定的事情可以作用于它们身上。正式的讲,对象是一个数据以及相关行为的集合。 面向简单的意思是指向。所以面向对象简单的意思就是“功能上指向建模对象”。 二、对象和类 一个对象是一个有着相应行为的数据的集合。在面向对象建模中,用于各种对象的术语叫做类。 类描述了对象,它们就像是创建对象的模板。 关联是把两个类联系起来最基

boweno的博客 212

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Python学习笔记:面向对象编程(3)

前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖子,廖雪峰的课程连接在这里:廖雪峰 Python的相关介绍,以及它的历史故事和运行机制,可以参见这篇:python介绍 Python的安装可以参见这篇:Python安装 Python的运行模式...

去向前方的博客 668

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【Python】学习笔记——-8.3、面向对象高级编程:3.多重继承

继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能。 回忆一下Animal类层次的设计,假设我们要实现以下4种动物: Dog - 狗狗;Bat - 蝙蝠;Parrot - 鹦鹉;Ostrich - 鸵鸟。 如果按照哺乳动物和鸟类归类,我们可以设计出这样的类的层次: 但是如果按照“能跑”和“能飞”来归类,我们就应该设计出这样的类的层次:

你只管努力, 542

python云计算开发技术_云计算开发学习笔记:Python3 面向对象技术简介

来源:TechWeb.com.cnPython从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程。接下来我们先来简单的了解下面向...

weixin_39951295的博客 77

Python3:面向对象编程学习笔记(2)

Python对象 ###创建Python类 ###模块和包

boweno的博客 221

Python程序设计之面向对象程序设计(2)

1.关于属性 类中的属性与普通变量不同,Python2.x中通过property()函数或者@property来声明一个属性,不用显性声明就可以通过对属性的重新赋值,来隐藏对象的原有属性值,会创建一个新值,但不会覆盖原有对象的属性值,但Python3.x中需要显性声明属性值的调用状态,才可有相应操作。 ①只能读取属性值的案例 class myClass5: def __init__(sel...

QinHsiu的博客 874

Python学习笔记大总结(我把我所有python笔记做了总结和学习顺序,点击即可进入相关博客。希望可以便于你们阅读)

这里写目录标题第一章:Python语法基础第二章:Python控制语句第三章:Python函数第四章:Python文件使用第五章:面向对象程序设计 不足的我会后续慢慢补充到该博客里 第一章:Python语法基础 (1)Python数据类型(整数,浮点数,复数,字符串,format()用法)(超详细笔记) (2)组合数据类型之序列类型(包含元组,列表,字符串)(Python学习笔记) (3)组合数据类型之集合类型(学习笔记)(Python) (4)(Python)组合数据类型之字典类型和操作(学习笔记) 第二

不吃辣的IT男 3万+

Python入门:Python3 面向对象全面学习教程

Python入门:Python3 面向对象全面学习教程,本文全面解析Python3面向对象编程,涵盖核心概念、语法与技巧。先介绍类、对象、方法、继承等基础概念,再讲解类的定义与实例化,包括构造方法__init__()及self的作用。还阐述了类的属性(类变量、实例变量、私有属性)和方法(实例方法、私有方法),详解继承机制(单继承、多继承)、方法重写与super()函数,以及类的专有方法与运算符重载,帮助读者掌握这一编程范式,提升代码质量与开发效率。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 21万+

3.9 Python3 面向对象

本文详细介绍了Python面向对象编程的核心概念和应用。主要内容包括:1)面向对象基本概念(类、对象、封装、继承、多态)及其优势;2)Python类的定义(构造函数、类属性、实例属性、访问控制);3)类方法类型(实例方法、类方法、静态方法)和特殊方法;4)继承机制(单继承、方法重写、MRO顺序)和多继承问题;5)类属性和方法的进阶使用(属性装饰器、描述符协议)。文章通过丰富的代码示例展示了Python面向对象编程的特性,包括动态属性、方法重载、抽象基类等高级特性,是一份全面的Python OOP实践指南。

weixin_40978412的博客 1900

Python3 面向对象

类(Class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。类中定义的函数。类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。类变量或者实例变量用于处理类及其实例对象的相关的数据。如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。定义在方法中的变量,只作用于当前实例的类。

b8977的博客 923
上一篇: 我的Python3学习笔记(2):python函数式编程
下一篇: 动态语言比较学习--基础
ssjssh
博客等级 码龄15年 12粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值