类通过关键字 class 引导,后跟类的名称,通常第一个字母大写,类名称MyClass后的括号内的object表示该类的父类,如果定义的类没有显明从哪个类继承来的,就在括号内使用object,object类是所有类的父类。
__init__是定义的类的构造函数,可以对类的变量进行初始化,每当该类被实例化的时候,就会先执行该构造函数。
在类中定义的函数的一个参数一定要是self,代表类当前的实例化对象,但在调用时,不需要传递这个参数。
2. 类的实例
类的实例化方法如下:
obj=MyClass(x,x)
obj是类的实例化对象,MyClass是类名,括号内的变量是类的初始化变量(如果类中有定义的话)。
情况一: 类的初始属性为空
class MyClass(object):
def __init__(self):
print("MyClass类的构造方法被调用!")
class1=MyClass()
情况二: 类含有初始属性
class MyClass(object):
def __init__(self,data1,data2):
self.__data1=data1
self.data2=data2
class1=MyClass('first_data','sencond_data')
print(class1.data2)
class1=MyClass('first_data','sencond_data')
print(class1.data2)
在这里类MyClass的实例化对象class1就具有了两个属性,分别是data1和data2,data1是私有属性,只能在类内使用,data2是公有属性,可以在类外使用。data1和data2就是对数据(属性)的封装。
实现逻辑(方法)的封装
class MyClass(object):
def __init__(self,data1,data2):
self.__data1=data1
self.data2=data2
def printMax(self):
if self.__data1>self.data2:
print(self.__data1)
else:
print(self.data2)
class1=MyClass(66,88)
class1.printMax()
上边类中的printMax函数实现了比较两个数据大小并打印的功能,这个实现逻辑在类外部来说是看不到的,只可以调用该接口,相当于一个黑箱子,这就是实现逻辑(方法)的封装。
4. 类的私有属性
可以在类内定义类的私有属性和方法,私有的表明只属于类内部的,在类外部是不可以直接访问的,python定义私有属性和私有方法的方法是在名称前加上两个下划线 “__”。
私有属性(变量)
class MyClass(object):
def __init__(self,data1,data2):
self.__data1=data1
self.data2=data2
class1=MyClass(66,88)
print(class1.data2)
print(class1.__data1)
上例中data2是公有变量,可以在类外访问,所有calss1.data2没有问题。 data1是类的私有属性,类外不可以访问,使用 class1.__data1会报错 'MyClass' object has no attribute '__data1' 。
class MyClass(object):
def __init__(self,data1,data2):
self.__data1=data1
self.data2=data2
def __func1(self):
print("MyClass类的私有方法被调用!")
def print_data(self):
self.__func1()
print(self.__data1)
print(self.data2)
class1=MyClass(66,88)
class1.print_data()
#class1.__func1()
上例中 print_data方法是类的公有方法,可以在类外直接调用, __func1方法是类的私有方法,不可以在类外调用,但是可以通过类内的print_data方法调用私有的__func1方法,即私有的方法可以在类的内部被调用。
5. 类外访问类的私有属性
类的私有属性保证了外部代码不能随意访问/更改对象内部的数据和方法。
但是对类内私有属性,在类外仍然可以通过以下两种 方式进行访问和修改,一是通过类内的公有函数修改,一是“非法修改”。
通过类内的公有函数修改
class MyClass(object):
def __init__(self,data1,data2):
self.__data1=data1
self.data2=data2
def setData1(self,data):
self.__data1=data
def printData1(self):
print(self.__data1)
class1=MyClass(66,88)
class1.setData1(100)
class1.printData1()
python中类的私有属性或方法之所以不能直接从类外部进行访问,是因为python解释器把私有的属性或方法 __xx 对外展示成了 _Class__xx,即单下划线+类名+__xx 。所以如果你执意,仍然可以在类外部通过这个改变后的名称“非法”访问私有属性。
class MyClass(object):
def __init__(self,data1,data2):
self.__data1=data1
self.data2=data2
def printData1(self):
print(self.__data1)
class1=MyClass(66,88)
print(class1._MyClass__data1)
当然一般不建议这么干,不同的python编译器可能把私有属性/方法包装成不同的名字。
1. 定义类python中定义一个类的格式如下:class MyClass(object): def __init__(self,data1,data2): self.__data1=data1 self.data2=data2 def __func1(self): print("MyCla
Python
面向对象面向对象基础
定义
类
创建对象添加和获取对象属性魔法
方法
对象的生命周期
私有
属性和
私有
方法
面向对象特性
封装
封装
案例演练继承继承的传递性
方法
的重写父
类
的
私有
属性和
私有
方法
多继承新式
类
与经典
类
多态多态案例演练面向对象其他实例对象
类
对象
类
属性
类
方法
静态
方法
案例演示
面向对象基础
特征 = 属性 行为 =
方法
class
类
名:
def
方法
名(self[, 参数列表]):
对象名 =
类
名()
对象 = 实例 创建对象 =
实例化
对象
由哪一个对象调用的
方法
,
方法
内的self 就是哪一个对象的引用;
打印对象和打印self得到的结
在
python
中使用class关键字来
定义
类
,
定义
类
时需要注意以下几个事项:
(1)
类
代码块以class关键字开头,代表
定义
类
。
(2)class之后是
类
名,这个名字由用户自己指定,命名规则一般是多个单词组成的名称,每个单词除了第一个字母大写之外,其余字母均为小写,class和
类
名中间要有空格。
(3)
类
名后加冒号,
类
体由缩进的语句块组成,
C++考试题目:
题目:建立一个名为Student的
类
,该
类
有以下几个
私有
成员
变量
:学生姓名、学号、性别、年龄。还有以下两个成员函数:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个主函数。声明一个学学生对象。然后调用成员函数在屏幕输出学生信息。
编程环境:vs2010,语言:c++ 属性:控制台应用程序。
面向对象编程(OOP)是最有效的软件编写
方法
之一,我们会使用到
类
(CLASS)来
定义
出一大
类
对象都有的行为,当我们基于
类
来创建对象时,每个对象都具备这种通用的行为。
然后根据需要赋予每个对象独特的个性。根据
类
来创建对象被称为
实例化
,你将把自己编写的
类
存储在模块中,并在自己的程序文件中导入其他程序员编写的
类
。
1. 创建
类
简单来说我们
定义
的
类
应该包含两部分:属性+功能。
我们来
定义
一...
通过
类
定义
数据
类
型的属性(数据)和
方法
(行为),也就是说,“
类
将行为和状态打包在一起”。
对象是
类
的具体实体,一般称为“
类
的实例”。
类
看做“饼干模具”,对象就是根据这个“模
具”制造出的“饼干”。
从一个
类
创建对象时,每个对象会共享这个
类
的行为(
类
中
定义
的
方法
),但会有自己的属性值(不共享状态)。更具体一点:“
方法
代码是共享的,属性数据不共享”。
Python
中,“一切皆对象”。
类
也称为“
类
对象”,
类
的实例也称
在
Python
中,没有严格意义上的
私有
变量
,但是可以通过以下方式实现
类
似于
私有
变量
的效果:
1. 在
变量
名前面加上两个下划线,例如`__variable`,表示该
变量
是
私有
的,不应该被外部直接访问,而只能通过
类
的
方法
来访问或修改。
2. 在
类
中使用`self.__variable`来
定义
私有
变量
,这样在
类
外部无法直接访问该
变量
。
class MyClass:
def __init__(self, a):
self.__a = a
def my_method(self):
self.__a += 1
print(self.__a)
在这个例子中,`__a`是一个
私有
变量
,只能在
类
的
方法
中进行访问或修改。`my_method`
方法
可以访问`__a`并将其加1,但是在
类
的外部无法直接访问`__a`。