- A+
一、类
第一种方式(面向过程):c语言
第二种方式(面向对象): java python
类(人):抽象的
对象(张三 同桌):具体
(1)类是抽象的,在使用的时候通常会找到这个类的一个具体的存在,使用这个具体的存在。一个
类可以找到多个对象
(2)对象是具体的某一个具体事物的存在 ,在现实世界中可以是看得见摸得着的。可以是直接使用的
关键字:self == this
代表当前类的对象
定义类:
1 2 3 4 5 6 |
#创建一个类 class Person: name="" age=0 #函数 def show(self): print("我的姓名:%s 年龄是:%d" %(self.name,self.age)) |
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。
1 2 3 4 5 6 |
class Test: def prt(self): print(self) print(self.__class__) t = Test() t.prt() |
结果:
1 |
<__main__.Test instance at 0x10d066878> __main__.Test |
从执行结果可以很明显的看出,self 代表的是类的实例,代表当前对象的地址,而 self.class 则指向类。
self 不是 python 关键字,我们把他换成 runoob 也是可以正常执行的:
1 2 3 4 5 6 |
class Test: def prt(runoob): print(runoob) print(runoob.__class__) t = Test() t.prt() |
结果:
1 |
<__main__.Test instance at 0x10d066878> __main__.Test |
python中内置类属性
dict : 类的属性(包含一个字典,由类的数据属性组成)
doc :类的文档字符串
name: 类名
module: 类定义所在的模块(类的全名是'main.className',如果类位于一个导入模块mymod中,那么className.module 等于 mymod)
bases : 类的所有父类构成元素(包含了一个由所有父类组成的元组)
二、对象
创建对象:
语法:java: 类名 对象名=new 类名()
py: 对象名=类名()
命名规范:
类名:所有单词首字母大写 Computer
对象:和 变量名(name myName) 一致
调用属性和函数
语法:
对象.属性
对象.函数名( )
1 2 3 4 5 6 7 |
#创建一个对象 p=Person() p.age=22 p.name="大雁" print(p.age,end="\t") print(p.name) p.show() |
示例:
1 2 3 4 5 6 7 |
class Computer: n1=0 n2=0 def add(self,n1,n2): return n1+n2 com=Computer(10,20) print(com.add) |
三、封装
定义:将属性私有化,提供公共方法,访问私有的属性
访问修饰符: private 私有 等价
范围:本类中可以访问
self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。self代表类的实例,而非类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
class Dyan: __name="" __age=0 def setName(self,name): self.__name=name def setAge(self,age): self.__age=age def getName(self): return self.__name def getAge(self): return self.__age def show(self): return "姓名:%s 年龄:%d" %(self.__name,self.__age) d=Dyan() d.setAge(18) d.setName("大雁") print(d.getAge()) print(d.getName()) print(d.show()) |
特殊情况:
1 2 3 4 5 6 7 8 9 |
class Teacher: def test1(self): print("test1‐‐‐‐",self.name,self.age) t=Teacher() t.name="张三" t.age=20 t.test1() t2=Teacher() t2.address="山西" #成功 # t2.test1() 报错 |
总结:
-
- 封装隐藏对象的属性的实现细节,
- 好处:提高安全性、可维护性
四、基础重载方法
java:本类中:方法重载:方法名相同 参数列表不同(数量 类型)
python:函数参数列表长度是可变 ,python没有重载概念
作用:初始化数据 实例化对象
调用:实例化时候自动调用构造方法
init()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
1 2 3 4 5 |
#构造方法 无参 class Person: def __init__(self): print("构造方法") p=Person() |
1 2 3 4 5 6 7 8 |
#构造方法 有参 class Person: name="" age=0 def __init__(self,name,age): print("构造方法") print("姓名:%s 年龄:%d " %(name,age) ) p=Person("大雁",22) |
删除方法:
1 2 |
def __del__(self): print("删除") |
String方法:
1 2 3 4 5 6 7 8 |
class Person: name="大雁" age=22 def __str__(self): return "姓名:%s 年龄%d" %(self.name ,self.age) #调用 P=Person() print(P) |
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫