Python面向对象学习
以下面例子作为面向对象基础介绍,类比java里的面向对象既可以,大同小异
class Employee(): raiseAmount=1.04
employeeNum= def __init__(self,first,surname,salary):#相当于java里面的结构体,self可以理解为this
self.first = first #属性
self.surname = surname
self.salary = salary
self.email = first + '.' + surname + '@163.com'
Employee.employeeNum+= def infosummary(self):#方法
return '{}, {}, {}'.format(self.first + " " + self.surname, self.salary,
self.email)
def raiseSalary(self):
self.salary = self.salary * self.raiseAmount employee1 = Employee('Harray','Potter',)#声明一个实例
employee2 = Employee('peter','lee',)
print(employee2.infosummary())
print(employee1.infosummary())
employee2.raiseAmount=1.09#修改全局变量
employee2.raiseSalary()
print(employee2.infosummary())
子类dog,cat继承动物animal,子类继承父类所有属性,并可以重写父类方法,并可以有自己的方法。
#继承
class Animal():
name=""
def __init__(self, age, weight , height):
self.age = age
self.weight = weight
self.height = height
def eat(self):
print(self.name+' '+"is eating") class Cat(Animal):
pass
class Dog(Animal):
def __init__(self,age,weight, height,name):
Animal.__init__(self,age,weight,height)
Animal.name=name
Animal.eat(self)
def bark(self):
print('the dog is barking') animal=Animal(,,)
animal.name='cat'
animal.eat()
cat = Cat(,,)
cat.eat()#name没有初始化,所以结果的name为空
dog = Dog(,,,'dog')
dog.bark()
实例方法:在类中,定义的方法,这个方法的第一个参数默认是实例对象,一般习惯使用self
类方法:在类中,定义的方法,这个方法的第一个参数默认是类对象,一般习惯用cls表示,用 @ classmethod装饰器装饰
静态方法:在类中定义的方法,这个方法的参数没有要求,用 @ staticmethod装饰器装饰
实例方法只能被实例(对象)调用
类方法和静态方法可以被类或者实例调用
class Foo(object): # 实例方法,第一个参数必须是实例对象。一般习惯用self。
def instance_method(self):
print("是类{}的实例方法,只能被实例对象调用".format(Foo)) # 类方法, 第一个参数必须是类 对象。一般习惯使用cls。使用@classmethod装饰器装饰。 @classmethod
def class_method(cls):
print("是类方法") # 静态方法,参数没有要求,和类没有绑定关系,就是一个普通的方法 使用@staticmethod装饰器装饰。 @staticmethod
def static_method():
print("是静态方法") foo = Foo() # 实例方法只能被实例调用。
foo.instance_method() print('----------') # 类方法可以被类或者实例调用。
Foo.class_method()
foo.class_method() print('----------') # 静态方法可以被类或者实例调用。
Foo.static_method()
foo.static_method()
对于Python的私有类属性不可以修改,但可以通过方法来实现对私有属性的控制。
class Animal():
name=""
def __init__(self, age, weight , height):
self.__age = age #私有的,不能被访问
#self.age = age #可以被访问
self.weight = weight
self.height = height
def eat(self):
print(self.name+' '+"is eating")
@property
def age(self):
return self.__age
def setAge(self,age):
if isinstance(age,int):
self.__age = age
@age.setter
def age(self,age):
if isinstance(age,int):#实现对属性进行修改时进行检查
self.__age = age cat = Animal(,,)
print(cat.age)
dog = Animal(,,)
#print(dog.__age)#报错,无法访问私有属性
print(dog.age)
dog.setAge()
print(dog.age)
dog.age=#直接赋值
print(dog.age)
具体详解可参考这位博文:https://www.cnblogs.com/ssj0723/p/10392993.html
关于Python的多态和多态性可以看这篇文章,我就不再转载了,https://www.cnblogs.com/luchuangao/p/6739557.html
Python面向对象学习的更多相关文章
- Python面向对象学习 1 (什么是面向对象,面向对象的应用场景,待更新)
程序设计的三种基本结构: 面向对象,面向过程,函数式编程 1,什么是面向对象编程 面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就 ...
- python 面向对象学习
------Python面向对象初 下面写一个类的简单实用,以便方便理解类 #python 3.5环境,解释器在linux需要改变 #阅读手册查询readme文件 #作者:S12-陈金彭 class ...
- python面向对象学习(二)基本语法
目录 1. dir内置函数 2. 定义简单的类(只包含方法) 2.1 定义只包含方法的类 2.2 创建对象 2.3 编写第一个面向对象程序 3. 方法中的self参数 3.1 案例改造 -- 给对象添 ...
- python面向对象学习(一)基本概念
目录 1. 面向对象基本概念 1.1 过程和函数 1.2 面相过程 和 面相对象 基本概念 2. 类和对象的概念 1.1 类 1.3 对象 3. 类和对象的关系 4. 类的设计 大驼峰命名法 4.1 ...
- Python面向对象学习2(面向对象的语法和特性,待更新)
上一个内容我们介绍了面向对象和面向对象场景现在我们来学习下语法和特性 1,面向对象基本语法: # -*- coding:utf-8 -*- # Author: Colin Yao class Dog( ...
- python面向对象学习笔记(一)
粘贴一些自学过程中的笔记大纲,源文本在pycharm里面写的,有点乱整理一下,部分内容有待补充,书写不一定100%正确,全当数据备份了. 1.面向对象的特性 #你写代码时什么使用面向对象 #处理比较复 ...
- python面向对象学习(七)单例
目录 1. 单例设计模式 单例设计模式的应用场景 2. __new__ 方法 3. Python 中的单例 只执行一次初始化工作 1. 单例设计模式 设计模式 设计模式 是 前人工作的总结和提炼,通常 ...
- python面向对象学习(六)类属性、类方法、静态方法
目录 1. 类的结构 1.1 术语 -- 实例 1.2 类是一个特殊的对象 2. 类属性和实例属性 2.1 概念和使用 2.2 属性的获取机制 3. 类方法和静态方法 3.1 类方法 3.2 静态方法 ...
- python面向对象学习(四)继承
目录 1. 单继承 1.1 继承的概念.语法和特点 1.2 方法的重写 1.3 父类的 私有属性 和 私有方法 2. 多继承 2.1 多继承的使用注意事项 2.2 新式类与旧式(经典)类 1. 单继承 ...
随机推荐
- Java多线程(五)之BlockingQueue深入分析
一.概述: BlockingQueue作为线程容器,可以为线程同步提供有力的保障. 二.BlockingQueue定义的常用方法 1.BlockingQueue定义的常用方法如下: 1)add( ...
- sklearn提供的自带数据集
sklearn 的数据集有好多个种 自带的小数据集(packaged dataset):sklearn.datasets.load_<name> 可在线下载的数据集(Downloaded ...
- 2019-8-27-静默命令行安装-Visual-C++-发行包
title author date CreateTime categories 静默命令行安装 Visual C++ 发行包 lindexi 2019-8-27 15:39:3 +0800 2019- ...
- Android欢迎页短暂白屏
在style中application theme下添加以下代码: <item name="android:windowIsTranslucent" >true</ ...
- Ubuntu Apache vhost不执行php小记
运行环境: Ubuntu : 16.04 PHP: 5.6.36 Apache: 2.4.18 出现/var/www/html 文件夹下的 php文件能够执行 vhost 配置文件的DocumentR ...
- Apache虚拟目录实现同一个IP绑定多个域名
在前:我使用的是Xampp,所以路径可能不同 找到apache\conf\extra\httpd-vhosts.conf, 如果没有的话请自己新建httpd-vhosts.conf文件, 并且在htt ...
- 阿里云图数据库GraphDB上线,助力图数据处理
GraphDB简介 GraphDB图数据库适用于存储,管理,查询复杂并且高度连接的数据,图库的结构特别适合发现大数据集下数据之间的共性和特性,特别善于释放蕴含在数据关系之间的巨大价值.GraphDB引 ...
- bfs理解——hdu6386好题
用队列维护,对于每块颜色相同的相连的边进行dfs并记录即可 注意这题要用vis来标记边,不可以标记点 因为点的深度是可以随时更新的(这样的做法不满足贪心条件) #include<bits/std ...
- LUOGU P3919 【模板】可持久化数组(主席树)
传送门 解题思路 给每一时刻建一棵线段树维护当前时刻的值,然后修改的时候直接修改,查询的时候直接查,记住查询完后一定要复制. 代码 #include<iostream> #include& ...
- 使用WebStorm上传本地项目到GitHub和GitLab
在使用 WebStorm 上传本地项目到 GitHub 之前,先要做一些相关配置. 首先打开 WebStorm ,依次点击File -> Settings… 打开系统设置面板,在上面搜索 git ...