首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python面向对象编程(OOP) —— 修改属性

这里就补充面向对象编程中遗漏的知识点 目录 修改类中数型的方法 一、给定一个类,修改其属性的值 1、 直接修改属性的值 2、通过方法来修改 3、 通过方法,对属性的值进行递增 修改类中数型的方法 一、给定一个类...,修改其属性的值 修改属性的值有三种方法:直接通过实例进行修改;通过方法进行设置;通过方法进行递增(增加的值) 首先我们定义一个车的类型的类,然后再加上车行驶的距离的一个属性赋初值 0 class Car...my_new_car = Car("aodi", "a6", 2017) print(my_new_car.get_description()) my_new_car.read_odometer() 1、 直接修改属性的值...miles on it") my_new_car = Car("aodi", "a6", 2017) print(my_new_car.get_description()) #直接更改,修改初始化中的属性...can'troll back an odometer") #通过方法来修改 my_new_car.update_orometer(25) my_new_car.read_odometer() 3、 通过方法,对属性的值进行递增

69420

Python 进阶指南(编程轻松进阶):十七、Python 风格 OOP:属性和魔术方法

原文:http://inventwithpython.com/beyond/chapter17.html 很多语言都有 OOP 特性,但是 Python 有一些独特的 OOP 特性,包括属性和魔术方法...但是请记住,将一个属性指定为私有只是一种约定:Python 中的所有属性从技术上来说都是公共的,这意味着它们可以被类外的代码访问。无法阻止代码有意或恶意地将_balance属性更改为无效值。...但是请注意,类外的代码从不直接访问_someAttribute属性(毕竟它是私有的)。相反,外部代码访问someAttribute属性。...您不希望获取器、设置器和删除器方法作用于该属性,因为这可能会导致错误。在一个可能的例子中,获取器方法将访问属性,导致获取器方法调用自己,这使得它再次访问属性,导致它再次调用自己,等等,直到程序崩溃。...总结 Python 实现面向对象特性的方式不同于其他 OOP 语言,比如 Java 或 C++。Python 没有显式的获取器和设置器方法,而是具有允许您验证属性或使属性为只读的属性。

65720
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    属性访问

    通常可以通过点(.)操作符的形式去访问对象的属性,关于属性的访问,也有相应的魔法方法来管理, 属性相关的魔法方法 魔法方法 含义 __getattr__(self,name) 定义当用户试图获取一个不存在的属性的行为...__getattribute__(self,name) 定义当该类的属性被访问时的行为 __setattr__(self,name,value) 定义当一个属性被设置时 __delattr__(self...,name) 定义一个属性被删除时 例子 class C: def __getattribute__(self,name):#当该类的属性被访问的行为 print('getattribute...print(i)...tianjun>>> 字符串相当一个容器,也同时是个迭代器,for语句的作用介绍触发这个迭代器的迭代功能,每次拿出一个数据,就是迭代操作 关于迭代 Python有两个BIF 重点...这样就不必创建完整的list,从而节省大量的空间,在Python中,这种一边循环一边计算的机制,称为生成器:generator 继续使用import sys斐波那契 def fibonacci(n):

    74330

    Python 中几种属性访问的区别

    图 | 《借东西的小人阿莉埃蒂》剧照 起步 python的提供一系列和属性访问有关的特殊方法:__get__, __getattr__, __getattribute__, __getitem__。...属性的访问机制 一般情况下,属性访问的默认行为是从对象的字典中获取,并当获取不到时会沿着一定的查找链进行查找。例如 a.x 的查找链就是,从 a.__dict__['x'] ,然后是 type(a)....若查找链都获取不到属性,则抛出 AttributeError 异常。 一、__getattr__ 方法 这个方法是当对象的属性不存在是调用。...不管属性存不存在。...__dict__['x'] = 1 # 不会调用 __get__ a.x # 调用 __get__ 如果查找的属性是在描述符对象中,则这个描述符会覆盖上文说的属性访问机制

    2.1K30

    Python OOP-1

    OOP-Python面向对象 Python面向对象 面向对象编程 基础 公有私有 继承 组合,Mixin 魔法函数 魔法函数概述 构造类魔法函数 运算类魔法函数 1....,其他不允许使用 成员属性定义可以直接使用变量赋值,如果没有值,允许使用None 案例 01.py 实例化类 变量 = 类名() # 实例化了一个对象 访问对象成员 使用点操作符...=3.6 :创建python版本为3.6的虚拟环境,名称为xxx 4....,没有self的 是绑定类的方法,只能通过类访问 使用类访问绑定类的方法时,如果类方法中需要访问当前类的成员,可以通过 class成员名来访问 6....,protected不是关键字 判别对象的位置 对象内部 对象外部 子类中 python中下划线的使用 私有 私有成员是最高级别的封装,只能在当前类或对象中访问 在成员前面添加两个下划线即可

    672107

    Python OOP-4

    类的成员描述符(属性) 类的成员描述是为了在类中对类的成员属性进行相关操作而创建的一种方式 get:获取属性的操作 set:修改或添加属性操作 delete:删除属性的操作 如果想使用类的额成员描述符,...大概有三种方法 使用类实现描述器 使用属性修饰符 使用property函数 property函数很简单 property(fget, fset, fdel, doc) 无论哪种修饰符都是为了对成员属性进行相应的控制...类的方式:适用多个类中的多个属性共用同一个描述符 property:适用当前类中使用,可以控制一个类中多个属性 属性修饰符:适用于当前类中使用,控制一个类中的一个属性 9....__getattr__:访问一个不存在的属性时触发 __setattr__:对成员属性进行设置的时候触发 参数: self用来获取当前对象 被设置的属性名称,以字符串形式出现 需要对属性名称设置的值...类和对象的三种方法 实例方法 需要实例化对象才能使用的方法,使用过程中可能需要截至对象的其他对象的方法完成 静态方法 不需要实例化,通过类直接访问 类方法 不需要实例化 # 属性案例

    397107

    python的OOP机制

    python的OOP机制 在Python中,实际上一切都是对象,我们使用的内置数据类型,本质上也是类的实例化。...除此之外,python的OOP模型基本就是处理内置类型的函数。 OOP不仅是一门技术,更是一种经验。...属性访问就是搜索类树,我们称这种搜索为“继承”。因为树中位置较低的对象继承了树中位置较高的对象所拥有的属性。...方法调用 前面我们介绍了python的OOP机制主要依赖两个基础之一:“继承属性搜索”,现在来看另一个基础:“函数的第一个参数”。前文所述的I2.w是一个属性,现在假设w是C3的函数。...事实上,类树中所有对象都只不过是命名空间对象,我们可以使用恰当的名称来访问或修改其任何属性。例如,编写C1.setname(I1, 'jack')和I1.setname('jack')是等效操作。

    42230

    Python OOP-2

    ## 6.2 继承 - 继承就是一个类可以获得另外一个类中的成员属性和成员方法 - 作用: 减少代码,增加代码的复用功能,同时可以设置类与类直接的关系 - 继承与被继承的概念: - 被继承的类叫父类...所有的类都继承自object类,即所有的类都是object类的子类 - 子类一旦继承父类,则可以使用父类中除私有成员外的所有内容 - 子类继承父类后并没有将父类成员完全赋值到子类中,而是通过引用关系访问调用...- 子类中可以定义独有的成员属性和方法 - 子类中定义的成员和父类成员如果相同,则优先使用子类成员 - 子类如果想扩充父类的方法,可以在定义新方法的同时访问父类成员来进行代码重用...# 继承的语法 # 在python中,任何类都有一个共同的父类叫object class Person(): name = "NoName" age = 18 __score..._petname) # 私有访问问题 # 公开访问私有变量,报错 # print(t.

    41587

    Python 类对象和实例对象访问属性的区别、property属性

    参考链接: Python中的类和实例属性 类对象、实例对象、类属性、实例属性  下面的一个小demo,定义了一个省份类  Province ,即类对象 Province ,开辟了一块内存空间,空间中存放着.../usr/bin/env python # _*_ coding:utf-8 _*_ class Province(object):  # 类也是一个对象  类对象     # 类属性 类空间内函数外定义的属性...obj = Province('山东省') obj2 = Province('山西省') # 直接访问实例属性 print(obj.name) print(obj2.name) # 直接访问类属性 Province.country...,其对应被 @property 修饰的方法新式类中的属性有三种访问方式,并分别对应了三个被@property、@方法名.setter、@方法名.deleter修饰的方法 #coding=utf-8 #...,我们可以根据它们几个属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除 案例如下:  class Goods(object):     def __init__(self):

    3.7K00

    Python OOP - practice_2

    创建北京和成都两个校区 创建Linux/Python两个课程 创建北京校区的Python 3期课程和成都校区的Linux 1期课程 管理员创建了北京校区的学员小张,并将其分配在了Python 3期 管理员创建了讲师小周...) Python.enroll(a) a.study(Python) a.pay(Python) b = Students("小王", 22, "F", "student", Python) Python.enroll...(b) b.study(Python) b.pay(Python) t = Teachers("小周", 30, "M", "teacher", Python) Python.hire(t) t.teach...(Python) t.record_mark("1", Python, a, "A") t.record_mark("1", Python, b, "B") t.record_mark("2", Python...我来这里学习Python课,我的学号是BJS302 我交了1000块钱给Python 我叫小周, 我是一个teacher 我们现在聘请了一个新老师小周 我来这里讲Python门课,我的id是BJT301

    28297

    连载 Python OOP指南(1)

    原则指出:“在计算机程序中,如果S是的子类型,则可以用类型的T对象T替换类型的对象,S而无需更改程序的任何所需属性”。...由于从CommissionEmployee派生SalaryEmployee,您可以weekly_salary直接访问该属性,并且可以.calculate_payroll()使用该属性的值来实现。...直接访问属性的问题在于,如果SalaryEmployee.calculate_payroll()更改了实现,则还必须更改的实现CommissionEmployee.calculate_payroll()...实现继承与接口继承 当您从另一个类派生一个类时,派生类将继承这两个类: 基类接口:派生类继承基类的所有方法,属性和属性。 基类实现:派生类继承了实现类接口的代码。...在PayrollSystem.calculate_payroll()需要实现以下接口对象的列表: id返回员工ID 的属性或属性 一个name代表雇员的名字属性或特性 一种.calculate_payroll

    81710

    Python OOP 面向对象编程

    参考:黑马程序员教程 - Python基础 面向对象 OOP三大特性,且三个特性是有顺序的: 封装 继承 多态 封装 指的就是把现实世界的事务,封装、抽象成编程里的对象,包括各种属性和方法。...如果要访问的话也可以,但是需要间接的调用父类再用方法调用私有内容。 多继承 Python中,子类是可以同时有多个父类的:也就是能够同时继承多个父类的所有属性、方法。...类与实例 Python中,实例是一个对象,类也是一个对象,一切皆对象。但这也是Python OOP中引起很多麻烦的原因。 实例对象非常好理解,也好用,直接用,就不说了。但是类对象就不那么好理解了。...cls参数: 类属性与实例属性 这是Python OOP中困扰很多人的特点。但是其实不难理解,总结如下: class MyClass: # 在这个位置定义的,叫类属性。...很多OOP语言,针对property属性,一般操作是:一个私有属性,配合两个公有方法。

    58510

    python面向对象OOP入门

    一、面向对象简介       面向对象编程不是python独有,几乎所有高级语言都支持;面向对象不管在那个语言中都有三大特性:即:封装、继承、多态;具体的本文主要讲python面向对象--类及三大特性的具体实现...5、构造函数__init__ 对于以上的示例我们往实例化后的对象中赋值也可以限制能赋的值,如果要实例化出多个类对象,每个类对象有共同的属性值,如name,age,sex等,那么我们可以通过构造函数__init...三、类特性二:继承 继承民是面向对象的特性之一,即子类(又叫派生类)继承父类(又叫基类或超类)的特性(属性,方法等);同时子类可以重写父类中的方法或属性。...说到继承这时提一嘴,python2.x和python3.x继承有点区别,python2.x是经典类,通过class 类名(object)变成新式类,python3.x默认是新式类;新式类和经典类的区别在于...的面向对象原生支持多态,不像java等强类型语言,传递参数时必须指定类型,而python没有此此限制,这也是python原生动支持多态的原因之一。

    41011

    JavaScript数据属性和访问器属性

    [[Configurable]]:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。...访问器属性 访问器属性不包含数据值(没有 [[Value]] 特性),它们包含一对 getter 和 setter 函数(这两个函数都不是必须的)。...在读取访问器属性时,会调用 getter 函数,这个函数负责返回有效的值;在写入访问器属性时,会调用 setter 并传入新值,这个函数负责决定如何处理数据。访问器属性有如下 4 个特性。..._year 前面的下划线是一种常用的记号,用于表示只能通过对象方法访问的属性(虽然理论上是可以直接访问的)。而访问器属性 year 则包含一个 getter 函数和一个 setter 函数。...参考资料 JavaScript笔记--数据属性和访问器属性 JavaScript 属性类型(数据属性和访问器属性)

    1.6K31
    领券